在我目前的项目中,我遇到了以下情况:
- VM1 用于显示在屏幕上。
- VM1 具有 VM2 的公共属性。
- VM1 具有 VM3 的公共属性。
- VM3 有一个依赖于 VM2 的属性。
- VM1 没有处理机制。
一开始我考虑挂钩到 VM2.PropertyChanged 事件来检查我想要的属性并相应地更改 VM3 受影响的属性,如:
public class VM1 : INotifyPropertyChanged
{
public property VM2 VM2 { get; private set; }
public property VM3 VM3 { get; private set; }
public VM1()
{
this.VM2 = new VM2();
this.VM3 = new VM3();
this.VM2.PropertyChanged += this.VM2_PropertyChanged;
}
private void VM2_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// if e.PropertyName equals bla then VM3.SomeProperty = lol.
}
}
这意味着,由于我无法在此类中取消挂钩事件,因此存在内存泄漏。
所以我最终将一个 Action 传递给 VM2 以便在其重要属性更改值时调用它,如下所示:
public class VM2 : INotifyPropertyChanged
{
public Action WhenP1Changes { get; set; }
private bool _p1;
public bool P1
{
get
{
return _p1;
}
set
{
_p1 = value;
this.WhenP1Changes();
this.PropertyChanged(this, new PropertChangedEventArgs("P1");
}
}
}
public class VM1 : INotifyPropertyChanged
{
public VM2 VM2 { get; private set; }
public VM3 VM3 { get; private set; }
public VM1()
{
this.VM2 = new VM2();
this.VM3 = new VM3();
this.VM2.WhenP1Changes = () => VM3.SomeProperty = "lol";
}
}
我这里有内存泄漏吗?
PD:如果您还可以回答以下问题,那就太好了: - 这甚至是一个好习惯吗?
谢谢