我可以使用EventAggregator订阅从ViewModel发布的WinForm中的事件吗?
我需要将来自WPF复合应用程序模块的ElementHost中承载WPF复合应用程序的WinForm的属性更改为described here。
我认为要解决这个问题,我可以使用EventAggregator在ViewModel中发布可由WinForm订阅的事件。这个事件的参数可能包括我想在WinForm上改变的东西,如标题。
我已经阅读了以下内容:
http://msdn.microsoft.com/en-us/library/ff921173%28v=PandP.40%29.aspx
http://www.codeproject.com/Articles/355473/Prism-EventAggregator-Sample
http://msdn.microsoft.com/en-us/library/ff649187.aspx
但是,如果EventAggregator在这种情况下适合用途,我仍然无法解决。
答案 0 :(得分:1)
如果所有这些组件都在同一个过程中,那么您可以使用EventAggregator
。
请记住,您必须在发布商和订阅者中引用聚合器的相同的实例 - 聚合器应该是单例或作为单例放在IoC容器中
答案 1 :(得分:0)
我最终使用了EventAggregator。这里是VB.NET中的代码,就像我在这个特定项目中使用的那样。
<强> 1。 EventAggregatorSingleton 强>
Imports System.Threading
Imports System.Runtime.InteropServices
Imports Microsoft.Practices.Composite.Events
Public Class EventAggregatorSingleton
Private Shared _currentEventAggregator As EventAggregator
Private Shared _syncLock As Object = New Object()
Public Shared ReadOnly Property CurrentEventAggregator As EventAggregator
Get
If _currentEventAggregator Is Nothing Then
SyncLock _syncLock
If _currentEventAggregator Is Nothing Then
Dim currEventAggregator As New EventAggregator
_currentEventAggregator = currEventAggregator
End If
End SyncLock
End If
Return _currentEventAggregator
End Get
End Property
End Class
<强> 2。活动类
Public Class ChartWizardPageChangedEvent
Inherits CompositePresentationEvent(Of WpfHostForm)
End Class
第3。从ViewModel发布事件
EventAggregatorSingleton.CurrentEventAggregator.GetEvent(Of ChartWizardPageChangedEvent)().Publish(_chartWizard)
<强> 4。订阅来自WinForm的活动
EventAggregatorSingleton.CurrentEventAggregator.GetEvent(Of ChartWizardPageChangedEvent)().Subscribe(New Action(Of WpfHostForm)(AddressOf App_HostFormChanged))