gpt4 book ai didi

wpf - 取消订阅 ViewModel 中的 EventAggregator 事件

转载 作者:行者123 更新时间:2023-12-04 14:07:39 24 4
gpt4 key购买 nike

我开始在 PRISM 和 MVVM 中使用 WPF。我面临的一个问题是,我找不到取消订阅以前在 ViewModel 中订阅的 EventAggregator 事件的好地方/最佳实践。以下解决方案 - 在析构函数中调用 Unsubscribe - 为时已晚。它只是与下一个垃圾收集一起运行。

public class ViewModel : ViewModelBase
{
public ViewModel()
{
var eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
eventAggregator.GetEvent<SeriesSelectionChangedEvent>().Subscribe(OnSeriesSelectionChanged);
}

~ViewModel()
{
var eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
eventAggregator.GetEvent<SeriesSelectionChangedEvent>().Unsubscribe(OnSeriesSelectionChanged);
}

void OnSeriesSelectionChanged(SeriesSelectionChangedEventArgs e)
{
}
}

最佳答案

由你决定!如果您的应用程序可以在不再需要 ViewModel 时通知它,那么您应该在那里取消订阅。

例如,在我们的项目中,我们有 IViewDisposeService。如果 View (或其模型)需要确定性的终结,它会在显示时在 IViewDisposeService 中注册自己。然后,Core 使用相同的服务来通知已从区域中删除的已注册 View 。

另一种方法是使用命令。您的模型公开命令必须在 View 关闭时调用。 ViewModel 可以使用命令处理程序取消订阅。

顺便说一句,如果您担心 EventAggregator 会保留您的 ViewModel,那也不是问题,因为 Prism 的 EventAggregator 使用弱引用。

关于wpf - 取消订阅 ViewModel 中的 EventAggregator 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5821486/

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