0

私は現在、プリズム IEventAggregator を使用して、異なるモジュールの 2 つのビュー間の wpf 通信を実験しています。パブリッシング モジュールとサブスクライブ モジュールは正常に動作していますが、何らかの理由で、サブスクライバー UI が更新されない理由がわかりません。サブスクライバー モジュールに msgbox を表示するボタンを配置して、それが確実に受信され、実行されるようにします。INotifyPropertyChangedを適切に実装していると思います。

サブスクライバー ビューのコード ビハインドにサブスクライブを配置すると、希望どおりに機能します....間違った方法で実行しますか? 私を修正してください。ありがとう。

モジュールメッセージパッシング用の別のクラス。このクラスはこの投稿からのものです http://www.shujaat.net/2010/12/wpf-eventaggregator-in-prism-40-cal.html

Public Class SendServices
Public Shared Property SendMessage As EventAggregator

Shared Sub New()
    SendMessage = New EventAggregator
End Sub
End Class

出版社 :

Public Class Module1ViewModel

Private _msgsend As String
Public WriteOnly Property MessageSend As String
    Set(value As String)
        _msgsend = value
    End Set
End Property

Public Sub Send()
    SendServices.SendMessage.GetEvent(Of SendStringEvent).Publish(New SendString With {.Name = _msgsend})
End Sub
End Class

加入者 :

Public Class Module2ViewModel
Implements INotifyPropertyChanged

Private _receivedMSG As String
Public Property ReceivedMSG As String
    Get
        Return _receivedMSG
    End Get
    Set(value As String)
        _receivedMSG = value

        OnPropertyChanged("ReceivedMSG")
    End Set
End Property
'Binded to subscriber View button using interactions
Public Sub Received()
    MsgBox(ReceivedMSG)
End Sub

Private Sub ReceivedMessage(msg As SendString)
    _receivedMSG = msg.Name
End Sub

Public Sub New()
    SendServices.SendMessage.GetEvent(Of SendStringEvent)().Subscribe(AddressOf ReceivedMessage, ThreadOption.UIThread, False)
End Sub

Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Protected Sub OnPropertyChanged(ByVal name As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(name))
End Sub
End Class

サブスクライバー ビューのコード ビハインド

Public Class Module2View
    Sub New()
        InitializeComponent()
        Me.DataContext = New Module2ViewModel
    End Sub
End Class

メッセージを表示するバインディング部分

<TextBox Height="23" HorizontalAlignment="Left" Margin="111,39,0,0" Name="TextBox1" VerticalAlignment="Top" Width="158" Text="{Binding Path=ReceviedMSG}"/>
4

1 に答える 1

1

イベントを発生させるプロパティセッターをバイパスしているハンドラーでOnPropertyChangedフィールドを直接設定しているため、イベントを発生させません。_receivedMSG

そのため、代わりにプロパティ セッターを使用する必要があります。

Private Sub ReceivedMessage(msg As SendString)
    ReceivedMSG = msg.Name
End Sub
于 2012-04-19T05:12:09.933 に答える