我有一个视图,我将调用具有嵌套用户控件的View1,我将其称为View2。我的主应用程序创建并显示View1,而View1又创建View2,因为它是View1上的用户控件。 View1和View2都有自己的视图模型。我需要做的是从View1的viewmodel获取一个值到View2的viewmodel。
View2是一个完全独立的控件,它有自己的功能,可以在任何其他视图中重复使用,但它需要从它包含的任何视图中获取一条信息。在这里给出的情况下,这将是视图1。
我的第一次尝试是在View2上创建依赖项属性,因此可以在View1中设置它,如下所示:
<myUserControls:View2 MyProperty="{Binding RelativeSource={RelativeSource Self}, Path=Parent.DataContext.MyProperty}"/>
这可以设置依赖项属性,但这无助于将属性值放入View2的viewmodel中,我可以在其中使用它。
我在Silverlight中这样做,如果这有任何区别。
任何人都知道有没有办法做到这一点?
答案 0 :(得分:0)
我建议使用“Mediator”模式,或者在视图模型之间进行某种通信。我个人已经使用galasoft MVVM轻松消息来获得成功。雷切尔还撰写了一篇关于导航的非常好的博客:Rachel's MVVM blog
但是我会尝试通过让消息传递处理数据上下文切换和viewmodel更新来减少程序中的耦合,而不是创建依赖项属性。
例如,您可以拥有一个所有视图模型继承的baseviewmodel类,并使用主视图模型中类型为baseviewmodel的多态通用“视图模型”属性。收到消息后,从viewmodel#1切换到viewmodel#2,调用“更新模型”功能(您已在baseviewmodel中声明并在您的VM#2中覆盖),然后将处理更新VM#2。 / p>