0
public ObservableCollection<Activity> activities = 
    new ObservableCollection<Activity> { };

public class Activity{
    public ObservableCollection<Event> Events { get; set; }
}

public class Event : INotifyPropertyChanged
{
    private int _Status;
    public int Status
    {
        get { return _Status; }
        set 
        {
            _Status = value;
            OnPropertyChanged("Status");
        } 
    }
}

假设Statusan 的属性发生了Event变化。OnPropertyChanged("Status")会叫,对吧?

但我希望该收藏activities也能收到有关此Event更改的通知。

有什么办法吗??

尝试恢复: 上面描述了这种情况。想象一下某个事件的一些变化。我需要将包含此事件的父活动的集合活动通知此更改......所以我可以调用一个方法来更新显示在我的界面某个位置的事件。而在这个界面中只是可见的活动集合。

正因为如此,还必须通知集合。

4

3 回答 3

0

我解决了这个问题,只是创建了一个静态动作:

public class Event{
    public static Action OnChanged;
}

基本上,每当我需要根据某些事件更改进行一些更改时,我都会调用它。

    private StatusMode _Status;
    [DataMember(Name = "Status")]
    public StatusMode Status
    {
        get { return _Status; }
        set 
        {
            _Status = value;
            OnPropertyChanged("Status");
            if (OnChanged != null)
            {
                OnChanged();
            }
        } 
    }

使用:

Event.OnChanged = UpdateContent;

public void UpdateContent()
{
//do something
}
于 2012-06-20T18:09:19.483 回答
0

您不 - .net 集合不关心其中项目的更改,只关心集合中的更改。

收听集合中事件的人必须在他感兴趣的项目上订阅/取消订阅 PropertyChanged。

于 2012-06-20T13:38:56.813 回答
0

这是一种痛苦,并且没有任何内置功能可以为您做到这一点。

当我需要这样做时,我只是订阅了 ObservableCollection 的 CollectionChanged 事件,并手动管理我对包含项目的 PropertyChanged 事件的订阅和退订。请注意,取消订阅已删除的项目很重要!否则,您可能会因事件订阅停止对已删除项目的垃圾收集而陷入困境。

我想可以构建一个包装器或您自己的集合类,它们将围绕一个集合并调解添加/删除,以便订阅/取消订阅属性更改事件。这似乎不值得努力。

至于为什么要这样做,最基本的例子是您有一组可变的项目,您需要知道该集合是否脏/需要保存。如果您的保存操作对整个系列都进行,那么必须观看所有项目感觉就像是错误的事情。我敢肯定,这似乎是一种更清洁的解决方案,还有其他原因。

于 2012-06-20T14:07:03.243 回答