我开始使用带有PRISM和MVVM的WPF。我面临的一个问题是,我无法找到一个好的地方/最佳做法来取消订阅以前在ViewModel中订阅的EventAggregator事件。以下解决方案 - 在析构函数中调用Unsubscribe - 太迟了。它只是运行下一个垃圾收集。取消订阅ViewModels中的EventAggregator事件
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)
{
}
}
注册事件时,您还可以选择强引用。 – 2011-04-29 06:46:56
这取决于我 - 这就是我所怀疑的。我认为你的第二个建议 - 通过视图触发命令 - 符合我的需要。很好的答案! – 2011-04-29 07:02:13
@Daniel:哎呀,我忘了它。这是很久以前,当我在我的项目中添加最后一个事件:)) – 2011-04-29 07:44:21