0

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ビューモデルをインスタンス化するときにトークンとして使用されるグローバル変数を持つなど、いくつかの解決策を考えることができます。より良い解決策はありますか?

4

0 に答える 0