1

我正在使用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;

这些都来自不同的类,这些类用于为我的自定义拖放行为(来自列表框)定义覆盖。

4

2 回答 2

2

在您的类上实现INotifyPropertyChanged接口。Job这应该允许你PropertyChanged在你的ObservableCollection<Job>.

要完全支持将数据值从绑定源对象传输到绑定目标,集合中支持可绑定属性的每个对象都必须实现适当的属性更改通知机制,例如 INotifyPropertyChanged 接口。

于 2011-10-31T13:37:26.483 回答
0

这是 StackOverflow 上的一个示例,它实现了一个 ObservableCollection,它在包含的元素被修改时也会引发事件:

ObservableCollection 还监视集合中元素的变化

请参阅Reed Copsey在此线程中的回答,以获取指向已实现侦听其子元素的 ObservableCollection 的项目的链接。

于 2011-10-31T13:53:16.953 回答