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)

任何建议将不胜感激。如果你需要更多的代码,请告诉我。

ObservableCollection setter不会在添加项时触发

你不应该在列表中为你的对象设置公共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继承并覆盖AddItemRemoveItem方法。

我们可以使用CollectionChanged来通知是否添加或删除一个项目。

对于想要将ObservableCollection<T> myObservableCollection绑定到某些控件并且根据添加或删除的项更改UI的人来说,可以将myObservableCollection.Count直接绑定到XAML控件。在我的例子中,我需要检查一个集合在XAML中是否为空,如果集合为空,则设置IsVisible=False。因此我做了

<Button IsVisible={Binding myObservableCollection.Count, Converter={StaticResource emptyToBooleanConverter}} />

我然后传递myObservableCollection.Count值转换器和返回布尔值false,如果集合是空的。如果你需要ValueConverter的代码,我可以提供顺便说一句,我正在使用Xamarin。形式(毛).