我有一个视图模型,它从某个服务中检索一个对象,并使其可用于数据绑定。该对象正在实施INotifyPropertyChanged
。PropertyChanged
在视图模型中,当对象中的某些属性被修改时,我正在监听事件以执行一些内部操作。
现在有可能从服务请求一个新对象,完全替换旧对象。鉴于生命周期本质上受视图模型本身的限制,并且没有其他人持有对它的引用(WPF 使用弱侦听器),在这种情况下我是否需要取消订阅该对象?当然,我应该并且在二传手中这样做很简单,但我真的需要吗?
public class MyViewModel : INotifyPropertyChanged
{
private DataType myData;
public DataType MyData
{
get { return myData; }
protected set
{
if (value == myData)
return;
if (myData != null)
myData.PropertyChanged -= DataPropertyChanged;
myData = value;
myData.PropertyChanged += DataPropertyChanged;
OnNotifyPropertyChanged("MyData");
}
}
public void UpdateData ()
{
MyData = service.GetData();
}
// ...
}