在离开页面时销毁数据上下文
本文关键字:数据 上下文 离开 | 更新日期: 2023-09-27 18:05:53
我将DataContext
设为Page.xaml.cs
DataContext = new PageViewModel();
在PageViewModel
中,我创建了Data Manager,它订阅不同的事件,加载数据,为ViewModel生成事件。
但是,当我离开页面我的ViewModel和DataManager对象继续生活,当我再次去这个页面,新的ViewModel和DataManager创建,现在有两个对象加载相同的数据等。如何避免这种泄漏?
在您的VM中设置一个清除方法来取消订阅所有事件并清除任何其他资源,然后在导航离开页面时调用该方法。另外,当导航离开时,将DataContext设置为null。
或者,为DataContext使用该ViewModel的单个实例,这样它就不会被重新创建。看看MVVM Light如何使用ViewModelLocator轻松地为您完成此操作,但您也可以在没有任何库的情况下轻松地自己完成。
添加到igrali的答案中。您可以实现视图模型的单例实例(它又包含数据管理器)。因此,即使清理也没有必要,因为你将有一个单一的视图模型。
public class MyViewModel
{
private static MyViewModel instance;
private MyViewModel() {}
public static MyViewModel Instance
{
get
{
if (instance == null)
{
instance = new MyViewModel();
}
return instance;
}
}
}
所以,不是每次都调用一个新的Viewmodel(),你可以只调用MyViewModel.instance(),它只会在必要的时候创建。您可以进一步引用net来获取线程安全的单例实现,以处理同时对该类进行多个调用的情况(这是可能的)。
如果你的数据管理器是独立于视图模型的,你也可以为其他类实现同样的单例模式。