0

INotifyPropertyChanged (この場合は Prism NotificationObject) を実装する 2 つの VM クラスがあり、一方の VM が他方の VM で変更されたプロパティに応答するようにしたいとします。

これらが両方とも親 VM のプロパティとしての子 VM であるとします。イベント アグリゲーター/メディエーターを使用せずに、親 VM からそれらを接続する方法は何ですか?

親 VM を介して、他の VM の PropertyChanged イベントに接続されたリッスン VM によって ICommand (PRISM DelegateCommand) を公開する予定です。

第一に、これは許容できる方法ですか?第二に、ICommand をイベントに接続するにはどうすればよいですか? プログラムによる EventToCommand などのアタッチされた動作を使用する必要がありますか、それとももっと簡単な方法がありますか?

第二に、これはMVVMの哲学の範囲内でこれを行うための許容可能な方法ですか?

4

1 に答える 1

3

より簡単です。イベントリスナーはターゲットクラスに完全にアクセスできるため、メソッド/コマンドを直接呼び出すことができます。

sourceVM.PropertyChanged += (sender, args) => {
    if (args.PropertyName.Equals("Property to listen for"))
    {
        targetVM.Method();
    }
};

または、ターゲットがICommand通常のメソッドではなくである必要がある場合は、targetVM.Command.Execute(null);代わりにを使用します。

OnPropertyChangedまた、ソースクラスにカスタムイベントを作成して、プロパティ名「マジックストリング」に依存しないようにすることをお勧めします。


MVVMの哲学と優れたデザインに関しては、2つのビューモデルがより緊密に結合されているため、多少逸脱していると思います。必ずしもアプローチが悪いとは限りませんが、Prismのイベントアグリゲーターの方が適しているようです。

于 2012-11-14T01:09:32.583 に答える