我正在处理一个Surface WPF项目,我们尝试实现MVVM模式。在这个项目中,我们正在构建一些我们绑定到不同视图模型的自定义控件。多个viewmodel互相交互
例如,我们有一个设置控件,它有一个设置viewmodel,我们有一个mainviewmodel,它是“整体”视图模型。
在我们的surfacewindows.xaml页面中,我们通过使用mvvm-light中的viewmodel定位器将datacontext设置为主视图模型。同样在我们的surfacewindow.xaml中,我们添加了我们的设置控件,并在控件上设置了datacontext设置viewmodel。
现在我们需要两个视图模型来互相交互:目前的情况是我们需要设置设置控件的可见性。我们在主视图模型上有一个属性,它是一个布尔型(IsSettingsControlVisible),通过使用转换器将布尔转换为可见性对象,该属性绑定到控件Visibility属性。
现在的问题出现在我们需要通过点击设置控件上的关闭按钮将可见性设置为不可见时。因为我们已将控件上的datacontext设置为设置viewmodel,所以我们无法访问mainviewmodel。
我们到目前为止想过的是将设置viewmodel作为属性添加到mainviewmodel并从设置控件中删除datacontext。在settingscontrol中,我们将使用作为SettingsProperty.Property的绑定。我们也可以从设置控制中访问主视图模型。那有意义吗?有没有更好的方式来进行这种交互?
我真的很想听听你如何让这些互动发生的想法。
我会看看温莎城堡,看看能不能帮助我。正如我所理解的,你正确地使用了“main”视图模型上的“sub”viewmodel来进行通信。 – ChristiaanV
没错。所以我的整个视图模型图独立于视图创建。我有选择然后构建图表的方式,以便视图模型可以很容易沟通,或者我会使用MVVM-Light的Messenger类,这对您来说可能更好。 – Tim
mvvm使者看起来像是我们完美的解决方案。会试一试。 – ChristiaanV