Использование EventAggregator для связи между WPF в ElementHost и хостом WinForm - PullRequest
1 голос
/ 28 марта 2012

Могу ли я использовать EventAggregator для подписки на события в WinForm, опубликованные из ViewModel?

Мне нужно изменить свойства WinForm, в которой размещено составное приложение WPF, в ElementHostиз модуля составного приложения WPF как , описанного здесь .

. Я подумал, что для решения этой проблемы я мог бы использовать 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 для этой цели.

Event Aggregator

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Если все эти компоненты находятся в одном процессе, тогда да, вы можете использовать EventAggregator.

Просто помните, что вам нужно ссылаться на один и тот же экземпляр агрегатора в издателе и подписчике - агрегатор должен быть одноэлементным или помещаться в контейнер IoC как одноэлементный.

0 голосов
/ 29 марта 2012

Я в конечном итоге использовал 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...