MVVM - 分离视图之间的通信

Mic*_*l G 7 wpf mvvm

我正在试图弄清楚如何执行以下操作:

我有一个CustomerListViewModel包含一个ObservableCollection<Customer>

MainView 包含这些视图的实例:

  • CustomerListView - 创建一个实例 CustomerListViewModel
  • SearchView - 创建和实例 SearchViewModel

我的问题是,如何保持CustomerListView和SearchView分开.只有在选择了客户时才应显示SearchView.SearchViewModel的唯一依赖项应该是CustomerModel.如果没有从CustomerListViewModel中选择Customer,则不应显示SearchView.

我是否应该引入一个包含a CustomerListViewModelSearchViewModel它的新View/ViewModel,它可以保存对Selected的引用Customer并切换SearchView的显示?如果没有,我该怎么办呢?

我知道这个问题非常广泛,但我会很感激任何建议.

Has*_*him 4

不要使 MainView 包含 CustomerListView 和 SearchView 的实例。他们三个应该是分开的。

就视图之间的通信而言,这应该使用 mvvm-light Messenger 等通过各自的视图模型来完成。如果您为每个视图注册不同的信使,那么您可以从视图模型将消息发送到您想要的任何视图。

只是使用 MVVMLight Messenger 的简单性示例:-

看法:

Messenger.Default.Register<NotificationMessage>(this, OpenViewMessageReceived);

private void OpenViewMessageReceived(NotificationMessage msg)
{
    //Logic 
}
Run Code Online (Sandbox Code Playgroud)

视图模型:

Messenger.Default.Send(new NotificationMessage(someStr));
Run Code Online (Sandbox Code Playgroud)