我正在开发可重复使用的WPF控件" R"它有自己的视图模型" VM_R"。 我有一个WPF主窗口" Main"它使用控件R,它也有自己的视图模型" VM_Main"。
我的问题: 我希望VM_Main和VM_R以下列方式进行通信:
VM_Main向VM_R发送请求以评估某些内容并将结果发送回VM_Main。
我考虑过以下几种选择:
谢谢
答案 0 :(得分:0)
我正在开发一个可重用的WPF控件“R”,它有自己的视图模型“VM_R”。
那可能是错的。一般来说,如果您认为某个特定控件需要视图模型,那么您真正要做的就是将代码放在错误的位置。
将这些内容粘贴到控件的代码隐藏中,并公开真实模型或视图模型可以绑定的依赖项属性。
在VM_Main中实例化VM_R。这将产生耦合问题。
这证实了我怀疑您将代码放在错误的位置。
我可以使用MVVM Light Messenger。
没有。不要使用它。 MVVM Light Messenger只是一个巨大的内存泄漏等待发生。
答案 1 :(得分:-1)
我建议选择选项1,但要更好一些。您可以使用DI将R_VM注入R_Main。这是示例
public interface IR_VM
{
int MyMethod(int param);
}
public class R_VM : IR_VM
{
public int MyMethod(int param)
{
// implemention
return 0;
}
}
public class VM_Main
{
public VM_Main(IR_VM rvm)
{
RVM = rvm;
}
public IR_VM RVM { get; set; }
}