我有一个CustomControl B,它使用DataContext / MVVM(viewModelB)。现在我想将CustomControl的一个Property绑定到另一个控件A(将viewModelA用作DataContext)。
所以我有两个想法:
每当viewModelA中的PropA发生变化时,我都可以直接更新viewModelB中的PropB。但是这会在viewModels之间创建一个依赖关系,这对我来说似乎很难看。或者这是MVVM模式中的常见方式,是无法避免的?
作为替代方案,我可以想到CustomControlB上的依赖属性,并通过绑定将其连接到CustomControlA的viewModel,类似:
<myControlB PropB={Binding ElementName=myControlA, Path=DataContext.PropA} />
。
到目前为止一切顺利,但依赖属性现在在视图上定义。我应该如何想象它?
a)我应该将值(从属性包装器)传输到viewModelB并从viewB的XAML代码绑定到它吗?
b)或者我应该直接从B的codeBehind更新视图?这仍然是一个合适的MVVM“风格”吗?
您会推荐哪些选项?
问候
安德烈亚斯
答案 0 :(得分:1)
只要ViewModelA没有主动更新ViewModelB,两个视图模型之间就没有真正的耦合。我的意思是,如果你的主视图模型(它知道两个视图模型)是连接绑定的那个,那么视图模型仍然松散耦合。
所以对我来说,这些都很好:
MainViewModel
的{{1}}属性注册更改事件,并根据需要修改ViewModelA
的属性。这里ViewModelB
知道两个视图模型,但它们彼此一无所知。