我有这段代码:
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 ......
我该怎么做才能解决这个问题?
答案 0 :(得分:1)
创建新集合时,将调用Stats集。
正确。这是因为代码设置了Stats
属性,该属性调用了setter方法。
但是,在添加对象时,它没有,因此它不会执行RaisePropertyChanged
也正确。在对象上调用.Add
时,代码不是设置保存该对象的属性。所以没有理由调用setter方法。在这种情况下,Stats
属性本身未被更改,您只是与对象进行交互。
我该怎么做才能解决这个问题?
您可以订阅的ObservableCollection
班级exposes two events。当集合本身发生更改时,将引发CollectionChanged
事件,并且当集合上的属性值发生更改时,将引发PropertyChanged
事件。
例如,如果要在集合更改时处理事件,可以订阅该事件:
Stats.CollectionChanged += CollectionChangeHandler;
// elsewhere...
private void CollectionChangeHandler(object sender, NotifyCollectionChangedEventArgs e)
{
// do something to respond to the changed collection
}