OnPropertyChanged
コレクション内の「子エンティティ」のプロパティを使用する計算されたプロパティに対して何らかのイベントをトリガーする方法はありますか?
小さな例:
Customer プロパティを表示する DataGrid を備えた単純な WPF アプリケーションがあります。私は Entity Framework 5 の CodeFirst アプローチを使用しているため、独自の INotifyPropertyChanged 実装を使用して手動でクラスを作成しました。
public partial class Customer : INotifyPropertyChanged
{
private string _firstName;
public virtual string FirstName
{
get { return _firstName; }
set
{
_firstName = value;
OnPropertyChanged("FirstName");
OnPropertyChanged("FullName");
}
}
private string _lastName;
public virtual string LastName
{
get { return _lastName; }
set
{
_lastName = value;
OnPropertyChanged("LastName");
OnPropertyChanged("FullName");
}
}
public virtual ICollection<Car> Cars { get; set; }
public virtual ICollection<Invoice> Invoices { get; set; }
...
}
同じクラスで、3 つの計算されたプロパティを作成しました。
public string FullName
{
get { return (FirstName + " " + LastName).Trim(); }
}
public int TotalCars
{
get
{
return Cars.Count();
}
}
public int TotalOpenInvoices
{
get
{
if (Invoices != null)
return (from i in Invoices
where i.PayedInFull == false
select i).Count();
else return 0;
}
}
FullName
呼び出しているため、DataGrid で自動的に更新されます。OnPropertyChanged("FullName");
TotalCars
ICollection に何かが追加または削除され
たときに自動更新するためにおそらく使用できる INotifyCollectionChanged 実装の例を見つけました: http://www.dotnetfunda.com/articles/article886-change-notification-for-objects- and-collections.aspx
しかし、ICollection ( ) 内のOnPropertyChange("TotalOpenInvoices")
プロパティ ( ) が変更されたときにトリガーする最良の方法は何ですか?PayedInFull
Invoices
Invoice クラスのようなことOnPropertyChanged("Customer.TotalOpenInvoices");
をしてもうまくいかないようです... :)