在我的ViewmodelA
中,我想在ViewModelB
中打开一个新窗口,所以我使用了messenger类,但问题是我需要在ViewModelB
中引用ViewModelA
,以便ViewModelB
可以收听消息
这是我的实施
在ViewModelA中:
private void btnAddExecute()
{
// I need to instanciate ViewModelB otherwise it wont work/listen
ViewModelB vb= new ViewModelB();
Messenger.Default.Send(new NotificationMessage("ShowWindow"));
}
在ViewModelB
中的我在其构建器中收听广播的消息。
无论如何要将ViewmodelA
与ViewmodelB
分开?
答案 0 :(得分:1)
如果您正确使用信使,我不确切地知道耦合发生在哪里。无需参考ViewModelB
修改强>
这是一种在不引用实例ViewModelB
的情况下执行此操作的方法。它使用单例来注册消息,并在收到通知消息时创建ViewModelB
。我没有测试过这个,这只是一个想法。确保在某个时候使用ViewModelBCreator,以便调用静态构造函数。
public class ViewModelBCreator()
{
private static ViewModelBCreator instance;
static ViewModelBCreator() { instance = new ViewModelBCreator(); }
private ViewModelBCreator()
{
Messaging.Messenger.Default.Register<NotificationMessage>(this, true, NotificationMessageReceived);
}
private static void NotificationMessageReceived(NotificationMessage notification)
{
var vm = ViewModelB();
//Do stuff with the new ViewModelB
}
}
public class ViewModelB
{
public ViewModelB()
{
//etc . . .
}
}
public class ViewModelA
{
public void OpenTheWindow()
{
Messenger.Default.Send(new NotificationMessage("ShowWindow"));
}
}