正如之前在一些 MvvmCross 视频中详述的那样 ( http://www.youtube.com/watch?v=cYu_9rcAJU4&feature=youtu.be&t=33m41s )
我正在尝试从我的视图模型中删除对我的视图的强引用。
在使用了 PropertyChanged += 的地方实现了 WeakSubscribe(),我现在遇到了一些使用 Action 来允许视图观察的场景。我认为这将再次导致潜在的内存泄漏,因此试图根除。
但是 - WeakReference 的工作原理是挂钩到 INotifyPropertyChanged 源:
那么我是否应该重构我的代码以放弃 Action 并通过 PropertyChanged 触发以便能够通过弱引用通知视图?
这是一些示例代码,仅供参考 - 当前强引用的架构。
视图模型
public event Action Loaded;
public HomeViewModel()
{
FeaturedProductCategoryViewModel = new FeaturedProductsViewModel();
FeaturedProductCategoryViewModel.OnPopulated += () =>
{
if (Loaded != null) Loaded();
};
}
看法
public MainHomePageView()
: base(GetNibName("MainHomePageView"), null)
{
this.EnableLandscapeRotation ();
}
protected override void ViewJustLoaded()
{
this.ViewModel.Loaded += LoadControls;
}
void LoadControls()
{
//load controls when view model is populated
}