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/code 中的哪个位置指定此令牌!

当然,我可以提供documentID从视图...

public MyView()
{
    InitializeComponent();
    DataContext = new MyViewModel("1234");
}

...有效地给了我同样的问题。我将在哪里指定这个“1234”值?我阅读了有关x:Arguments Directive的信息,希望它能让我在 中指定构造函数参数XAML,但似乎它仅在Loose XAML:(

我可以想到几个解决方案,比如有一个全局变量 ,ActiveDocumentID在实例化视图模型时将其用作标记。有更好的解决方案吗?

4

0 回答 0