これは、Composite Application Guidance/PrismのようなEventAggregatorを使用するのに理想的です。
このモデルでは、アプリケーション(または他の共通領域)のルートにMessageBusを設定できます。 App.xaml.cs
のpublic static IEventAggregator MessageBus =新しいEventAggregator()内
//;
はその後、共通のメッセージライブラリSimpleObjectがこのイベントを処理するために必要なすべての情報が含まれているクラスまたは変数である
// in Messages.cs
public class SimpleCommand: CompositePresentationEvent<SimpleObject> { }
を設定します。
// in control with button
App.MessageBus.GetEvent<Messages.SimpleCommand>().Publish(SimpleObject);
// anywhere in your app that you "care" about this
App.MessageBus.GetEvent<Messages.SimpleCommand>().Subscribe(ProcessingMethod);
ProcessingMethodは、パラメータとしてSimpleObjectを使用するメソッドです。
次に、どこからでもメッセージを吹き出して、ビューモデルやコントロールなどのどこからでもメッセージを処理できます。アプリケーションの一部を動的に読み込む場合は、コンポーネント間でMessageBusを渡すこともできます。うまくいく。
私はこの種のイベントセットアップに混乱していますが、ネストされたコントロールは複数のビューに存在します。これはネストされたコントロール(ビューとビューモデル)であるため、再利用可能な機能のためにネストされていると見なすのが妥当です。単純なイベントが使用されている場合、他のビューにあるものの代わりに「私の子ビューモデル」のみをターゲットにする良い方法はないようです。ネストされたビュー&vmが複数のビューにネストされた場合、1つのビューでボタンをクリックすると、他の複数のビューが誤って更新されるという状況に陥る可能性があります。 – CodingWithSpike