design-patterns - MVVM Light DI 在虚拟机之间共享数据?

标签 design-patterns mvvm dependency-injection mvvm-light

目前我正在使用 DI 在虚拟机之间传递数据,想象一下搜索页面和结果页面或主/详细信息的场景。

因此,在这种情况下,我应该创建一个称为“参数 VM”的 VM(带有或不带有模型)来存储我的搜索参数,并在详细信息或结果 VM 中读取它们。

此外,我在 VMLocator 中注册了此参数 VM,并将其注入(inject)到两个 VM 的构造函数中。

我得到的是,当我搜索新数据并将要搜索的数据存储在此参数 VM 中时,我在结果/详细信息 VM 中也成功获取了数据。

所以这是一种使用 MVVM Light 的经过验证的模式,尽管在网络上没有很好的记录,但我的问题是,这在性能和代码可读性方面是否是一个好方法。我想知道是否有人在不使用 MVVM Light 中的消息系统的情况下使用另一种方法。

我对这种方法的一个烦恼是我必须将我的参数封装在继承 ViewModelBase 的 VM 中,如果我想注入(inject)一个普通类,我无法将更改传播到第二个 VM,我仍然不知道为什么我可以'对一个简单的类(class)做同样的事情,我想知道是否有人也知道原因。我在 VM 中创建一个简单类的原因是因为在 WP 和 W8 中,我可以使用 VMLocator 中的工厂在停用和激活应用程序时恢复模型的状态。

我会很感激你的意见!

最佳答案

我们使用 EventAggregator我们的模块化 WPF 应用程序中的模式。在这种情况下,您的 View 模型不需要相互了解。相反,它们都共享一个作为构造函数参数注入(inject)的 IEventAggregator 服务实例。然后,Master ViewModel然后使用特殊事件类别发布事件(例如,选择更改时),详细信息ViewModel订阅该类型的事件,当事件发生时,请对其进行 react (通过显示新的详细信息)。使用这种模式,您可以设置不同项目中的 View 模型的通信,而无需任何紧密耦合。当然,两个 View 模型共享他们可以处理的事件类的知识。

互联网上有这种模式的各种实现。其中一些可以直接从 VisualStudio 使用 NuGet 安装,Caliburn.Micro.EventAggregator例如。

希望有帮助=)

关于design-patterns - MVVM Light DI 在虚拟机之间共享数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15886991/

相关文章:

c# - 存储库模式,应该是 1 :1?

java - builder模式和大量强制参数

unit-testing - 单元测试/TDD 的有用设计模式?

mvvm - 使用匿名对象 (MVVMCross) 在 WP7 上将变量从 ViewModel 传递到 ViewModel 时出现 methodAccessException

c# - 将 IConfiguration 注入(inject) .NET Core 3.0 中的 Program.cs(控制台应用程序)

java - Enterprise JavaBean 中方法的访问修饰符

xamarin - 如何在 DelegateCommand 中使用异步方法

c# - 从DataGrid按钮获取CommandParameter

AngularJS:服务、提供商、工厂

dependency-injection - 何时使用 PerThreadLifetimeManager?