MVVM,WPF让A知道发生在B中的事件的最好方法是什么?



图片帮你理解

在名为A的UserControl中有B个窗口和B个ViewModel。我想知道在A视图模型中,当selectedItem在B窗口中发生变化时。(或在视图模型中引发事件)最好的方法是什么?

B窗口组合框

<ComboBox Height="30" ItemsSource="{Binding ModelCollection}"
DisplayMemberPath="Name"
SelectedItem="{Binding Model}"/>

进一步修改

谢谢你的回复。请检查一下这是不是一个好方法。

MainViewModel

Children1.OnContentChanged += new Children1.SelectedInfoChanged(Children2.SelectEvent);

Children1

public delegate void SelectedInfoChanged(Info info);
public event SelectedInfoChanged OnContentChanged;
public Info SelectInfo
{
get { return _selectInfo; }
set 
{
if(SelectInfo != value)
_selectInfo = value;
OnContentChanged(_selectInfo);
}
}
}

Children2

public void SelectEvent(Info info)
{
}

最好的方法是什么?

一个常见的解决方案是在事件/消息的发布者和订阅者之间引入一个事件聚合器或消息传递器。然后订阅者和发布者只知道事件聚合器。它们对彼此一无所知,这意味着它们可以彼此独立进化。这反过来又会导致松耦合,从维护的角度来看,这是非常好的。

关于这个概念的更多信息,请参考这篇博客文章。

另一个类似的选择是给你的视图模型(或其他组件)注入一个共享服务,并使用这个服务在它们之间进行通信。

相关内容

  • 没有找到相关文章

最新更新