使用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时用作标记。有更好的解决方案吗?