一部のサービスからオブジェクトを取得し、データ バインディングで使用できるようにするビュー モデルがあります。オブジェクトは を実装して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();
}
// ...
}