注册MVVM消息时如何标记视图模型?

时间:2013-01-08 13:48:31

标签: wpf xaml mvvm mvvm-light

使用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,它将在实例化viewmodel时用作标记。有更好的解决方案吗?

0 个答案:

没有答案