【发布时间】:2023-04-04 11:10:01
【问题描述】:
我有一个非常简单的场景,我无法正常工作。我有 2 个视图,即 CarView 和 CarWindowView(子窗口)以及相应的 ViewModel。在我的 CarView 中,我有一个 EditButton,可以打开 CarWindowView(子窗口),我可以在其中编辑 Car 对象字段。
我的问题是我的 CarWindowView ViewModel 中的 DisplayModule 方法被调用太多次...当我第一次按下编辑按钮时,它被调用一次,第二次被调用两次,第三次被调用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 只存储一次单击,而不是我对“编辑”按钮的所有单击。对不起,如果这不是很好的解释!感谢您的帮助!
【问题讨论】:
标签: silverlight events mvvm prism eventaggregator