【发布时间】:2014-10-22 13:01:56
【问题描述】:
我有这段代码:
private ObservableCollection<Stats> _stats;
public StatisticsViewModel()
{
Stats = new ObservableCollection<Stats>();
Stats.Add(new Stats() { Type = "Min", Price = 100, Legend = Legend.Default });
}
public ObservableCollection<Stats> Stats
{
get
{
return _stats;
}
set
{
if (_stats != value)
{
_stats = value;
RaisePropertyChanged("Stats");
}
}
}
创建新集合时,会调用 Stats 集。但是,在添加对象时,它没有,因此它不执行 RaisePropertyChanged...
我可以做些什么来解决这个问题?
【问题讨论】:
-
嗯,您可以为 Stats 集合的 CollectionChanged 事件注册一个处理程序,并每次调用
RaisePropertyChanged()。但你真的需要它吗? -
工作正常,向集合中添加项目不会调用 setter,您实际上是在 getter 返回的集合上调用
Add()。如果您想在集合中添加或删除项目时执行某些操作,请挂接到CollectionChanged事件 -
或者更简单地说:如果属性没有改变,为什么会引发
PropertyChanged? -
您是否尝试过将该属性绑定到某些 ItemsControl 的
ItemsSource?当只有一些项目添加到集合中时,我不认为提高 propertychanged 是必须做的。 -
ObservableCollection<T>不会在其父对象上引发PropertyChanged事件。当添加或删除某些内容时,它会在自身上引发CollectionChanged事件。 WPF 知道ObservableCollection<T>和CollectionChanged事件,因此它可以像PropertyChanged一样用于绑定类似于。但它们并不相同。