你不应该做一个类型
IDisposable
只有一个目的是可以取消订阅活动。
不可分的
意味着,类型包含非托管资源或其他
不可分的
类型。
如果您的视图模型
已经实现
IDisposable公司
,您当然可以取消订阅那里的活动。
如果没有,您可以创建
CleanUp
(或类似)方法和退订那里。
我有一个很好的解决办法。我叫他们
一枪
事件处理程序(或
自动取消订阅
事件处理程序)。这就是C 7的新特性
“本地功能”
有帮助。
void IntermediateViewModel_CreateViewModels()
{
MainViewModel myMainViewmodel = new MyViewModel();
SecondViewModel mySecondViewModel = new SecondViewModel();
myMainViewmodel.MyEvent += LocalEventHandler;
void LocalEventHandler(object sender, EventArgs e)
{
// unsubscribe --> no memory leaks!
myMainViewmodel.MyEvent -= LocalEventHandler;
mySecondViewmodel.handleEvent(sender, e);
}
}
在这种情况下
MainViewModel.MyEvent
火灾,本地功能
LocalEventHandler
作为事件处理程序执行。您可以在本地函数中立即取消订阅事件,这样就不再有引用(没有内存泄漏,视图模型可以被gced)。
从您的用例中,我了解到您想要创建一个对话框视图模型,使用视图显示它,然后立即删除该视图模型。那么,我的样品完全符合你的要求。