c# - 我应该如何在 ViewModel 之间进行通信?

标签 c# wpf mvvm viewmodel mvvm-light

我正在使用 MVVM Light 并使用打包的信使系统在 View 模型之间进行通信,但是我遇到了一些难题!基本上,当用户点击客户记录时,相应的 View 就会打开,CustomerViewModel 也会随之实例化。此时,CustomerViewModel 需要来自先前 View 模型 (ViewAllCustomersViewModel) 的选定客户 ID,以便它可以获取 View 绑定(bind)到的选定客户信息(仍在跟踪?) .所以最初我的想法是在消息中将该 ID 从 ViewAllCustomersViewModel(选择要查看的客户)发送到 CustomerViewModel...但是,CustomerViewModel 在加载 View 之前不会实例化以接收消息(此时消息已经广播)!

那么,解决这个问题的最佳方法是什么?到目前为止,我已经考虑了 CustomerViewModel 在实例化后向 ViewAllCustomersViewModel 发送请求(基本上是说“我已准备好接收消息”),然后是 < em>ViewAllCustomersViewModel 将 ID 发送回 CustomerViewModel...但这是解决此问题的必要方法吗?我觉得有点丑!

否则,我在想是否有另一种沟通方式可以解决我遇到的问题?但这难道不是消息系统的全部意义……能够在 View 模型之间进行通信吗?或者我可以强制在启动时实例化 View 模型吗?如果是,那将如何影响 ViewModelLocator

我希望我已经清楚地概述了这个问题,为了解释的目的,我使用了虚构的 View 模型名称......请随时编辑或建议您希望我添加的任何其他信息!

最佳答案

您是否尝试通过您的模型进行交流?直到最后我都无法阅读您的主题,但这就是我在 ViewModel 之间进行交流的方式。 两个 View 模型都有 session 实例。

public ViewModel1(ISession session)
        {
            _session = session;           
        }

public ViewModel2(ISession session)
        {
            _session = session;           
        }

这样,当您在 BDD(行为驱动开发)中测试您的应用程序时,您可以在没有 View 的情况下测试您的应用程序。胶水就是模型。

正如您在这张图片中看到的,您应该能够在没有 View 的情况下测试您的应用程序。 enter image description here

关于c# - 我应该如何在 ViewModel 之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19029801/

相关文章:

c# - 我的 Asp.Net 空 Web 应用程序项目中缺少 Global.asax 文件

C# WPF 应用程序首先打开常规 Windows 窗体

c# - 如何使笔刷平滑而中间没有线条

c# - MVVM:单独的 ViewModel 的目的是什么?

android - 将MutableLiveData传递给其他ViewModel是否有效?

c# - 如何刷新 System.IO.DirectoryInfo.GetFiles().Length

c# - 使用 cab 文件安装应用程序时,区域性特定字符串资源 dll 在 .net 紧凑框架中不起作用

c# - 如何在 C# 中将 DataTable 转换为 XML 文件?

c# - 当自定义控件的子项及其属性发生更改时,如何重新呈现自定义控件?

具有ItemsControl的WPF MVVM可移动形状