私は非常に基本的な質問をしている場合私はMVVWパターンの新しいですので、あなたは私を許す必要があります。1つのViewModelからMVVWの別のViewModelにイベントを伝播する方法はありますか?
私は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));
}
}
}
これは、2つのビューモデルの間の直接の参照を作成し、それはないでしょうか? MVVWについての私の理解は、これが強く推奨されないことです...しかし、フレームワークガイドラインへの厳格な遵守は、何の利益ももたらさない場合があることを認めています。 – Nathanael
これは強く推奨されていませんでした。ビューモデル間に関係がある場合は、互いに参照を保持するのは完全に賢明です。たとえば、http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090016のMainWindowViewModelとWorkspaceViewModelの関係を参照してください。 –