OnPropertyChanged
有没有办法为使用集合中“子实体”属性的计算属性触发某种事件?
一个小例子:
我有一个带有显示客户属性的 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");
我找到了一个 INotifyCollectionChanged 实现的示例,我可能可以使用它来自动更新TotalCars
在 ICollection 中添加或删除某些内容时:http:
//www.dotnetfunda.com/articles/article886-change-notification-for-objects-和-collections.aspx
但是,当ICollection ( ) 中OnPropertyChange("TotalOpenInvoices")
的属性 ( ) 发生变化时触发的最佳方法是什么?PayedInFull
Invoices
在 Invoice 类中做类似的事情OnPropertyChanged("Customer.TotalOpenInvoices");
似乎并不能解决问题...... :)