gpt4 book ai didi

silverlight - 我可以在EventAggregator中删除重复事件吗?

转载 作者:行者123 更新时间:2023-12-03 10:21:12 24 4
gpt4 key购买 nike

我有一个非常简单的方案,无法正常工作。我有2个 View ,CarView和CarWindowView(子窗口)以及相应的ViewModels。在我的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存储一次单击,而不是全部存储在Edit按钮上。对不起,如果没有很好地解释!帮助赞赏!

最佳答案

听起来您有CarWindowViewModel的内存泄漏。换句话说,您有该类的多个实例尚未被垃圾回收。在调试器中,查看GetHashCode。我敢打赌它们是不同的。

假设您正在使用Prism的EventAggregator,它应该保持对对象的弱引用,因此这不是您的问题。

最有可能的是,您需要确保完成ViewModel后,该订阅会从事件中退订。另外,请查看您是否可以找出引用链中的哪些内容使它们保持 Activity 状态。

关于silverlight - 我可以在EventAggregator中删除重复事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2964763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com