在离开页面

时间:2015-08-02 16:10:36

标签: c# xaml windows-phone-8 windows-phone-8.1 windows-phone

我在DataContext

中设置Page.xaml.cs
DataContext = new PageViewModel();

PageViewModel我创建了Data Manager,它订阅了不同的事件,加载数据,为ViewModel生成事件。

但是,当我离开页面时,我的ViewModel和DataManager对象继续存在,当我再次访问此页面时,创建了新的ViewModel和DataManager,现在有两个对象加载相同的数据等。 如何避免这种泄漏?

2 个答案:

答案 0 :(得分:1)

在VM中使用清理方法取消订阅所有事件并清除任何其他资源,然后在离开页面时调用方法。此外,在导航时将DataContext设置为null。

或者,为DataContext使用该ViewModel的单个实例,以便它不会被重新创建。了解MVVM Light如何使用ViewModelLocator轻松完成,但您可以轻松地自行完成,无需任何库。

答案 1 :(得分:0)

添加igrali的答案。您可以实现Viewmodel的单例实例(后者又包含数据管理器)。所以即使清理也没必要,因为你会有一个视图模型。

    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(),只有在必要时才会创建。您可以进一步将网络引用为线程安全的单例实现,以处理可能同时对此类进行多次调用的情况。

如果您的数据管理器独立于viewmodel,您也可以为其他类实现相同的单例模式。