查看模型双向通信

时间:2017-02-10 13:23:58

标签: c# wpf mvvm viewmodel

我正在开发可重复使用的WPF控件" R"它有自己的视图模型" VM_R"。 我有一个WPF主窗口" Main"它使用控件R,它也有自己的视图模型" VM_Main"。

我的问题: 我希望VM_Main和VM_R以下列方式进行通信:

VM_Main向VM_R发送请求以评估某些内容并将结果发送回VM_Main。

我考虑过以下几种选择:

  1. 在VM_Main中实例化VM_R。这将创建一个耦合 关注。
  2. 我可以使用MVVM Light Messenger。但是,我不希望有两个注册呼叫和两个发送呼叫。
  3. 谢谢

2 个答案:

答案 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; }
}