5

私は MVVW パターンにまったく慣れていないので、非常に基本的な質問をしている場合はご容赦ください。

私は 2 つの 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));
        }
    }
}
4

3 に答える 3

3

確かにイベント アグリゲーターを使用できますが、このような単純なものには必要ありません。あなたは単にListViewViewModel聞くことができTreeViewViewModel.PropertyChangedます。

于 2011-02-16T01:57:16.560 に答える
2

EventAggregatorは良いオプションであり、あなたのコードは私には正しいように見えます。他のオプションは、SharedService、または単に1つのビューモデルから別のビューモデルへの直接参照を持つことです。Prismフレームワークには、このトピックに関する優れたドキュメントがあります:http: //msdn.microsoft.com/en-us/library/ff921122 (v=PandP.40).aspx

于 2011-02-15T21:49:09.150 に答える
1

あなたの他のオプションはメディエーターパターンです。ここに一例があります: http://marlongrech.wordpress.com/2009/04/16/mediator-v2-for-mvvm-wpf-and-silverlight-applications/

于 2011-02-16T03:16:02.667 に答える