有人可以解释调解器模式如何与多个实例一起工作。MVVM调解器多个实例
我的视图代码:
public MyView() {
Mediator.Register("CloseWindow",()=>Close());
}
,并在视图模型:
public SomeMethod() {
Mediator.Notify("CloseWindow");
}
这找工作,只要有只有一个视图的实例 - 视图模型对。
如何解决多个实例?
有人可以解释调解器模式如何与多个实例一起工作。MVVM调解器多个实例
我的视图代码:
public MyView() {
Mediator.Register("CloseWindow",()=>Close());
}
,并在视图模型:
public SomeMethod() {
Mediator.Notify("CloseWindow");
}
这找工作,只要有只有一个视图的实例 - 视图模型对。
如何解决多个实例?
我使用替代解决方案。 MyView实现了一个包含Close方法的接口IMyView。 MyViewModel对象关联View,因此它可以通过接口调用Close方法。
如果你有兴趣在一个具体的例子,那么你可能看看:
我不知道你的mediator模式的特定实现是如何工作的,但是在我的情况下,你可以发送比字符串更多的信息。
例如:
public MyView() {
Mediator.Register<CloseWindowMessage>(message =>
{
if (message.ViewModel == DataContext) Close();
});
}
,并在视图模型:
public SomeMethod() {
Mediator.Notify(new CloseWindowMessage(this));
}
在该示例中,视图模型通过本身作为参数的图。该视图然后可以检查消息是从其视图模型发送的。
我选择介体模式,因为它比接口更简单,我可以将它用于垂直(MV <-> V)和水平(MV <-> MV)。我现在看到它是错误的,并将使用接口。在我看来,调解员模式从根本上被打破了(至少对于观点而言)。中介使用GC进行生命期控制,而视图则不使用GC。答案是因此不要使用中介视图。 – adrianm 2009-11-04 10:18:36