应该如何将事件从一个ViewModel传播到MVVW中的另一个ViewModel?

Nat*_*ael 5 wpf viewmodel eventaggregator

我是MVVW模式的新手,所以如果我问一个非常基本的问题,你将不得不原谅我.

我有两个ViewModel,我们称之为TreeViewViewModel和ListViewViewModel.TreeViewViewModel在其视图中绑定到IsSelected属性.每当IsSelected更改时,我都需要通知ListViewViewModel以便它可以更新它的视图.

经过一些网上研究,我遇到了EventAggregator,看起来它可能是一个很好的解决方案.

这是正确的解决方案吗?如果是这样,我该如何实施呢?或者,我应该考虑更好的解决方案吗?下面是我认为可以将EventAggregator集成到发布事件的ViewModel中的简化版本.

public class TreeViewViewModel : INotifyPropertyChanged
{
    public bool IsSelected
    {
        get { return _isSelected; }
        set
        {
            if (value == _isSelected)
                return;

            _isSelected = value;

            OnPropertyChanged("IsSelected");

            // Is this sane?
            _eventAggregator.GetEvent<TreeViewItemSelectedEvent>().Publish(value);
        }
    }

    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*ney 3

您当然可以使用事件聚合器,但您不需要事件聚合器来完成如此简单的事情。您可以简单地ListViewViewModel听一下TreeViewViewModel.PropertyChanged