编写WPF视图和MVVM视图模型

时间:2012-01-10 22:19:23

标签: c# wpf mvvm

我有一个带有嵌套WPF UserControls的UI,每个UI都有自己的视图模型。视图(XAML)层次结构的简单情况是:

MainWindow
    |-> Logical group
      |-> Logical control
    |-> Second logical group
    |-> Third logical group
      |-> Logical control

每个XAML视图都有一个ViewModel,它封装了交互逻辑。我的问题是将ViewModel状态从父视图模型传递到子视图模型。

例如,MainWindow中的用户互动可以在CurrentlySelectedGroup中设置MainWindowViewModel变量。我需要知道LogicalControlViewModel内的值是什么。

我正在考虑采用两种主要方式。首先,我可以广播一个事件DispatchGroupSelected,然后在LogicalControlViewModel内分配一个委托作为该事件的监听器。其次,我可以Bind CurrentlySelectedGroup MainWindowViewModel LogicalControlViewModel {{1}}内的{{1}}属性。

我的第一直觉是使用事件在父视图模型和子视图模型之间进行通信。我认为在View Model和View之间最好保持绑定。到目前为止的事件已被用于在我的ViewModel和命令之间进行通信。如果有另一个可能的方向,那就更好了,我有兴趣听听它。

1 个答案:

答案 0 :(得分:1)

你尝试过消息总线吗?有几个框架可以实现这种模式:

  • PRISM,有它的EventAggregator,您可以在其中定义合同,然后发送和接收通知。
  • MVVM Light,也有一个MessageBus,你可以了解它here
  • RectiveUI,这是我最喜欢的,它结合了Reactive Extensions Observable和Message Bus模式的强大功能,可以找到一些文档here

使用此模式,您的ViewModel可以以松散耦合的方式与其他模式通信,因为每个ViewModel只发送一条消息而不关心谁将会收听它。如果ViewModel想要侦听特定的消息类型,它可以订阅只获取那些消息。