使用 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
在实例化视图模型时将其用作标记。有更好的解决方案吗?