2009-11-03 39 views
1

有人可以解释调解器模式如何与多个实例一起工作。MVVM调解器多个实例

我的视图代码:

public MyView() { 
    Mediator.Register("CloseWindow",()=>Close()); 
} 

,并在视图模型:

public SomeMethod() { 
    Mediator.Notify("CloseWindow"); 
} 

这找工作,只要有只有一个视图的实例 - 视图模型对。

如何解决多个实例?

回答

1

我使用替代解决方案。 MyView实现了一个包含Close方法的接口IMyView。 MyViewModel对象关联View,因此它可以通过接口调用Close方法。

如果你有兴趣在一个具体的例子,那么你可能看看:

WPF Application Framework (WAF)

+0

我选择介体模式,因为它比接口更简单,我可以将它用于垂直(MV <-> V)和水平(MV <-> MV)。我现在看到它是错误的,并将使用接口。在我看来,调解员模式从根本上被打破了(至少对于观点而言)。中介使用GC进行生命期控制,而视图则不使用GC。答案是因此不要使用中介视图。 – adrianm 2009-11-04 10:18:36

0

我不知道你的mediator模式的特定实现是如何工作的,但是在我的情况下,你可以发送比字符串更多的信息。

例如:

public MyView() { 
    Mediator.Register<CloseWindowMessage>(message => 
    { 
     if (message.ViewModel == DataContext) Close(); 
    }); 
}  

,并在视图模型:

public SomeMethod() { 
    Mediator.Notify(new CloseWindowMessage(this)); 
} 

在该示例中,视图模型通过本身作为参数的图。该视图然后可以检查消息是从其视图模型发送的。

+0

我想到这一点,但我认为它变成多一个选择的策略。我倾向于在Close事件中从消息中注销的解决方案。 – adrianm 2009-11-03 20:08:14

+0

或者您可以为每个对话创建一个单独的消息类,然后避免“选入”。 – Grokys 2009-11-03 20:26:26