我正在使用我定义的Job
类的可观察集合。我已经绑定了一个处理INotifyCollectionChanged
事件的方法。 MSDN告诉我INotifyCollectionChanged
是“动态更改的监听器,例如添加和删除项目或刷新整个列表时”,但我想监听任何作业类的属性更改在集合中,是否有一个事件处理程序?我知道有一个INotifyPropertyChanged
界面,但我希望这可以用于集合。
编辑:
说实话我很困惑,所以我应该给我正在做的事情提供更多背景信息,这样我才能得到答案。我在“工作”课程中拥有这个属性:
public Boolean IsPlanned
{
get
{
return this.Storage<Job>().isPlanned;
}
set
{
var storage = this.Storage<Job>();
if (storage.isPlanned != value)
{
storage.isPlanned = value;
this.OnPropertyChanged(() => this.isPlanned);
MessageBox.Show("IsPlanned property was changed on one of the jobs " + this.Subject);
}
}
}
这个作业类实际上是从telerik控件的约会类继承的(恰好实现了INotifyPropertyChanged)。从telerik文档我也得到了上面的代码(减去消息框)。现在,当我更改此布尔值ONCE时,该消息框行将被执行5次。
任何帮助表示赞赏!!
编辑2:IsPlanned的路径已更改:
PresentationManager.Instance.AllJobs.Single(o => o.JobGuid.Equals(((Job)state.DraggedAppointments.First()).JobGuid)).IsPlanned = true;
PresentationManager.Instance.AllJobs.Single(o => o.JobGuid.Equals(((Job)payload.DraggedAppointments.First()).JobGuid)).IsPlanned = false;
这些都来自不同的类,用于为我的自定义拖放行为(来自列表框)定义覆盖。
答案 0 :(得分:2)
在Job
课程上实施INotifyPropertyChanged界面。这样您就可以使用PropertyChanged
上的ObservableCollection<Job>
。
完全支持从绑定源对象传输数据值 绑定目标,集合中支持的每个对象 可绑定属性必须实现更改的适当属性 通知机制,例如INotifyPropertyChanged接口。
答案 1 :(得分:0)
这里有一个关于实现ObservableCollection的StackOverflow的例子,它也在修改包含的元素时引发事件:
ObservableCollection that also monitors changes on the elements in collection
请参阅Reed Copsey的answer in this thread以获取指向已隐藏监听其子元素的ObservableCollection的项目的链接。