ObservableCollection setter不会在添加项时触发
本文关键字:添加 setter ObservableCollection | 更新日期: 2023-09-27 18:19:03
我正在WPF中使用MVVM Light框架进行一个项目。我有一个DataGrid
和一个ObservableCollection<Worker>
结合。到目前为止,当我添加一个新项目时,DataGrid
不会更新,我相信这是因为setter从未触发。
public ObservableCollection<Worker> MasterWorkerList
{
get { return _masterWorkerList; }
set
{
System.Windows.MessageBox.Show("Firing");
_masterWorkerList = value;
RaisePropertyChanged(() => MasterWorkerList);
}
}
消息框永远不会显示,即使我调用这个:
DataManager.Data.MasterWorkerList.Add(_create.NewWorker());
我怎么能得到RaisePropertyChanged
火,所以我可以更新UI?
我已经尝试过使用这篇文章中的解决方案,但无济于事:ObservableCollection没有注意到其中的Item变化(即使使用INotifyPropertyChanged)
任何建议将不胜感激。如果你需要更多的代码,请告诉我。
你不应该在列表中为你的对象设置公共setter。你应该在构造函数
中设置public MyClass(){
_masterWorkerList = new ObservableCollection<Worker>();
_masterWorkerList.CollectionChanged += OnCollectionChanged;
}
public ObservableCollection<Worker> MasterWorkerList
{
get { return _masterWorkerList; }
}
private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e){
System.Windows.MessageBox.Show("Firing");
//RaisePropertyChanged(() => MasterWorkerList);
}
CollectionChanged
事件被调用,当你Add
一些东西到ObservableCollection。如果您需要更根深蒂固的控制,您可以从ObservableCollection
继承并覆盖AddItem
和RemoveItem
方法。
我们可以使用CollectionChanged
来通知是否添加或删除一个项目。
对于想要将ObservableCollection<T> myObservableCollection
绑定到某些控件并且根据添加或删除的项更改UI的人来说,可以将myObservableCollection.Count
直接绑定到XAML控件。在我的例子中,我需要检查一个集合在XAML中是否为空,如果集合为空,则设置IsVisible=False
。因此我做了
<Button IsVisible={Binding myObservableCollection.Count, Converter={StaticResource emptyToBooleanConverter}} />
我然后传递myObservableCollection.Count
值转换器和返回布尔值false,如果集合是空的。如果你需要ValueConverter的代码,我可以提供顺便说一句,我正在使用Xamarin。形式(毛).