正しく動作することができない非常に単純なシナリオがあります。CarViewとCarWindowView(子ウィンドウ)の2つのビューがあり、対応するViewModelがあります。私のCarViewには、Carオブジェクトフィールドを編集できるCarWindowView(子ウィンドウ)を開くEditButtonがあります。
私の問題は、CarWindowView ViewModelのDisplayModuleメソッドが何度も呼び出されていることです...最初に編集ボタンを押すと、1回呼び出され、2回目はtwineと呼ばれ、3回目は3回呼び出されます。だから砦...!
CarView ViewModelコンストラクター:
Public Sub New(ByVal eventAggregator As IEventAggregator, ByVal con As IUnityContainer, ByVal mgr As ICarManager, ByVal CarService As ICarService)
_Container = con
_CarManager = mgr
_EventAggregator = eventAggregator
'Create the DelegateCommands
NewBtnClick = New DelegateCommand(Of Object)(AddressOf HandleNewCarBtnClick)
EditBtnClick = New DelegateCommand(Of Object)(AddressOf HandleEditCarBtnClick)
End Sub
CarView ViewModel HandleEditCarBtnClickメソッド:
Private Sub HandleEditCarBtnClick()
Dim view = New CarWindowView
Dim viewModel = _Container.Resolve(Of CarWindowViewModel)()
viewModel.CurrentDomainContext = DomainContext
viewModel.CurrentItem = CurrentItem
viewModel.IsEnabled = False
view.ApplyModel(viewModel)
view.Show()
_EventAggregator.GetEvent(Of CarCollectionEvent)().Publish(EditObject)
End Sub
CarWindowView ViewModelコンストラクター:
Public Sub New(ByVal eventAggregator As IEventAggregator, ByVal con As IUnityContainer, ByVal mgr As ICarManager, ByVal CarService As ICarService)
_Container = con
_CarManager = mgr
_EventAggregator = eventAggregator
_EventAggregator.GetEvent(Of CarCollectionEvent).Subscribe(AddressOf DisplayModule)
End Sub
CarWindowView ViewModel DisplayModuleメソッド(これは何度も呼び出されるメソッドです):
Public Sub DisplayModule(ByVal param As String)
If param = EditObject Then
IsInEditMode = True
' Logic removed for display reasons here. This logic breaks because it's called too many times.
End If
End Sub
そのため、EventAggregatorで、[編集]ボタンのすべてのクリックではなく、1回のクリックだけを保存する方法を理解できません。これがうまく説明されていない場合は申し訳ありません!感謝します!