如何在.Net WPF MVVM应用程序中的ViewModel之间传递事件?

时间:2017-02-17 16:16:47

标签: c# .net wpf mvvm

我正在创建一个仪表板的.Net WPF应用程序。 我需要能够在仪表板上的不同视图模型之间传递事件。 这对我来说就像一个酒吧/次级活动模型。

实现适合MVVM FrameWork的解决方案的最佳方法是什么? 我开始关注Prism,但我想知道这是否对我的需求有点重要。

有人可以推荐最佳实践方法并指出一些简单的方法 实施的例子?

谢谢, JohnB

2 个答案:

答案 0 :(得分:1)

请参阅以下博客文章,了解如何使用事件聚合器模式以松散耦合的方式在视图模型之间进行通信:https://blog.magnusmontin.net/2014/02/28/using-the-event-aggregator-pattern-to-communicate-between-view-models/

这应该回答你的问题。

另一种选择是使用共享服务:https://social.msdn.microsoft.com/Forums/en-US/22907a0f-d805-4195-8272-7c284b72d2ee/example-of-using-shared-services-prism?forum=wpf

有一个例子说明如何在GitHub上提供的最新版Prism中使用EventAggregator类:https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/EventAggregation

答案 1 :(得分:0)

对于MVVM,我肯定更喜欢使用MVVMLIGHTLIBS。首先,有一个eventtrigger功能,你可以在其中执行mousedown,mouseup,selectionchanged等等。当你尝试绑定eventtrigger的命令时,它会让你的生活变得更轻松 例如:

<i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
          <i:InvokeCommandAction Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=employeeListBox, Path=SelectedValue}"/>
        </i:EventTrigger>
      </i:Interaction.Triggers>
    </ListBox>

MyCommand将在您的viewmodel中使用relaycommand或commandhandler实现,无论您喜欢哪个。 此外,如果您想要遵循MVVM模式,那么有关绑定clr属性,依赖属性和控件附加属性的知识也非常重要。 我想分享几个例子:  ----事件触发器--------- http://www.c-sharpcorner.com/blogs/example-of-eventtrigger-in-mvvm-application1 -----附加属性和依赖属性---- 总结一下: 附加属性用于容器元素。例如,您可以拥有网格,然后您可以创建grid.rowdefinition和grid.columndefinition以使行和列的数量动态更改

依赖项属性是从DependencyObject派生的类的属性,它们是特殊的,而不是简单地使用支持字段来存储它们的值,它们在DependencyObject上使用一些辅助方法。

这些是关于wpf和mvvm的非常基本的东西,涉及模型,视图和视图模型。