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");
}
}
}
假设Status
的{{1}}属性已更改。 Event
会被调用,对吧?
但我希望系列OnPropertyChanged("Status")
也会收到有关此activities
更改的通知。
有办法吗?
尝试恢复: 以上描述了该场景。 想象一下某些事件的一些变化。 我需要收集活动,其中包含此事件的父活动,通知有关此更改...所以我可以调用一个方法来更新在我的界面的某个地方显示的事件。并且在此界面中只显示活动集合。
正因为如此,还必须通知收集。
答案 0 :(得分:0)
你没有 - .net集合不关心它们中项目的变化,只关心集合中的变化。
无论是谁收听集合中的事件,都必须对他感兴趣的项目订阅/取消下载PropertyChanged。
答案 1 :(得分:0)
这是一种痛苦,没有任何内置可以为你做到这一点。
当我需要这样做时,我只是订阅了ObservableCollection的CollectionChanged事件,并手动管理我对订阅项的PropertyChanged事件的订阅和取消订阅。请注意,取消订阅已删除的项目非常重要!否则,您的事件订阅可以让您自己遇到麻烦,停止对已删除项目的垃圾回收。
我认为可以构建一个包装器或您自己的集合类,它将围绕一个集合并调解添加/删除,以便订阅/取消订阅属性更改事件。这似乎不值得努力。
至于为什么要这样做,最基本的例子是你有一组可变项,你需要知道这个集是否脏/需要保存。如果您的保存操作在整个设置上运行,那么必须观看所有项目感觉是错误的。我确信,还有其他原因可以解释为什么这样看起来更清晰。
答案 2 :(得分: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
}