如何访问另一个控件的viewModel

时间:2014-01-24 08:59:29

标签: c# wpf xaml mvvm

我有一个CustomControl B,它使用DataContext / MVVM(viewModelB)。现在我想将CustomControl的一个Property绑定到另一个控件A(将viewModelA用作DataContext)。

所以我有两个想法:

  1. 每当viewModelA中的PropA发生变化时,我都可以直接更新viewModelB中的PropB。但是这会在viewModels之间创建一个依赖关系,这对我来说似乎很难看。或者这是MVVM模式中的常见方式,是无法避免的?

  2. 作为替代方案,我可以想到CustomControlB上的依赖属性,并通过绑定将其连接到CustomControlA的viewModel,类似:

    <myControlB PropB={Binding ElementName=myControlA, Path=DataContext.PropA} />

    到目前为止一切顺利,但依赖属性现在在视图上定义。我应该如何想象它?

    • a)我应该将值(从属性包装器)传输到viewModelB并从viewB的XAML代码绑定到它吗?

    • b)或者我应该直接从B的codeBehind更新视图?这仍然是一个合适的MVVM“风格”吗?

  3. 您会推荐哪些选项?

    问候

    安德烈亚斯

1 个答案:

答案 0 :(得分:1)

只要ViewModelA没有主动更新ViewModelB,两个视图模型之间就没有真正的耦合。我的意思是,如果你的主视图模型(它知道两个视图模型)是连接绑定的那个,那么视图模型仍然松散耦合。

所以对我来说,这些都很好:

  • 直接绑定到XAML的myControlA.DataContext.PropA
  • MainViewModel的{​​{1}}属性注册更改事件,并根据需要修改ViewModelA的属性。这里ViewModelB知道两个视图模型,但它们彼此一无所知。