Я в конечном итоге использовал 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))