MVVM Light を使用すると、特定の種類のメッセージを簡単に登録できます。
public MyViewModel()
{
Messaging.Messenger.Default.Register<MyObject>(this,
new Action<MyObject>((o) => DataMember = o));
}
現在、ソフトウェアに複数のドキュメント ビューがあり、ビューを切り替えるときにビューを表示/非表示にすることを意味します。ビュー インスタンスが非表示の場合、登録されているメッセージを無視したい。同様に、ビュー インスタンスが表示されたときに、登録されたメッセージを処理する必要があります。したがって、ドキュメントごとにメッセージ トークンが必要です。
public MyViewModel(String documentID)
{
Messaging.Messenger.Default.Register<MyObject>(this,
documentID,
new Action<MyObject>((o) => DataMember = o));
}
問題は、XAML/コードでこのトークンを指定する場所がわからないことです!
確かにdocumentID
、ビューから提供できます...
public MyView()
{
InitializeComponent();
DataContext = new MyViewModel("1234");
}
...効果的に私に同じ問題を与えています。この「1234」の値はどこで指定しますか? x:Arguments Directiveについて読んで、でコンストラクター引数を指定できることを期待していますが、 :(XAML
でのみサポートされているようですLoose XAML
ActiveDocumentID
ビューモデルをインスタンス化するときにトークンとして使用されるグローバル変数を持つなど、いくつかの解決策を考えることができます。より良い解決策はありますか?