C# 可观察到的采集完全不工作
我有一段代码:C# 可观察到的采集完全不工作,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一段代码: private ObservableCollection<Stats> _stats; public StatisticsViewModel() { Stats = new ObservableCollection<Stats>(); Stats.Add(new Stats() { Type = "Min", Price = 100, Legend = Legend.Default }); } public ObservableColl
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");
}
}
}
private observedcollection\u stats;
公共统计视图模型()
{
Stats=新的ObservableCollection();
添加(newstats(){Type=“Min”,Price=100,Legend=Legend.Default});
}
公共可观测收集统计数据
{
得到
{
返回统计数据;
}
设置
{
如果(_stats!=值)
{
_统计=价值;
RaisePropertyChanged(“统计数据”);
}
}
}
创建新集合时,将调用统计数据集。但是,当添加对象时,它不会,因此它不会执行RaisePropertyChanged
我可以做些什么来解决这个问题
创建新集合时,将调用统计数据集
对。这是因为代码正在设置调用setter方法的Stats
属性
但是,在添加对象时,它不会执行,因此它不会执行RaisePropertyChanged
也对。在对象上调用.Add
时,代码没有设置保存该对象的属性。因此,没有理由调用setter方法。在本例中,Stats
属性本身没有被更改,您只是在与对象交互
我可以做些什么来解决这个问题
您可以订阅的ObservableCollection
类。当集合本身发生更改时,将引发CollectionChanged
事件;当集合上的属性值发生更改时,将引发PropertyChanged
事件
例如,如果要在集合更改时处理事件,可以订阅该事件:
Stats.CollectionChanged += CollectionChangeHandler;
// elsewhere...
private void CollectionChangeHandler(object sender, NotifyCollectionChangedEventArgs e)
{
// do something to respond to the changed collection
}
您可以为Stats集合的CollectionChanged事件注册一个处理程序,并每次调用
RaisePropertyChanged()
。但是您真的需要它吗?它工作得很好,向集合中添加项不会调用setter,实际上是对getter返回的集合调用Add()
。如果您想在集合中添加或删除和项时执行某些操作,请连接到CollectionChanged
事件,或者更简单地说:如果属性没有更改,它为什么会引发PropertyChanged
?您是否确实尝试过将该属性绑定到某些ItemsControl的某些ItemsSource
?我认为,当集合中只添加了一些项时,提升propertychanged不是必须的。一个ObservableCollection
不会在其父对象上引发propertychanged
事件。当添加或删除某些内容时,它会在自身上引发CollectionChanged
事件。WPF知道observateCollection
和CollectionChanged
事件,因此它用于绑定的方式类似于PropertyChanged
的工作方式。但是它们不是一个。但是在添加项目时,我应该如何更新UI?@Bv202:那么,您想对UI做什么?如果您想手动执行更新,那么可以在CollectionChangeHandler
方法中执行。尽管如此,WPF会自动订阅ObservableCollection
事件,因此如果相应地使用,它将自动更新。