ObservableCollection的setter在添加项时不触发

6
我正在使用MVVM Light框架在WPF项目中工作。我有一个绑定到ObservableCollection<Worker>DataGrid。目前,当我添加新项时,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 not noticing when Item in it changes (even with INotifyPropertyChanged)

如果您需要更多我的代码,请告诉我。感谢您的建议。

2个回答

15

你的对象中不应该有公共列表的设置器。你应该在构造函数中设置它。

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事件在你向ObservableCollection添加内容时被调用。如果你需要更深入的控制,可以从ObservableCollection继承并重写AddItemRemoveItem方法。


1
我们可以使用CollectionChanged来通知添加或删除项。
对于想要将ObservableCollection<T> myObservableCollection绑定到某个控件并根据添加或删除的项改变UI的人,您可以直接将myObservableCollection.Count绑定到XAML控件。在我的情况下,我需要在XAML中检查集合是否为空,并在集合为空时设置IsVisible=False。因此,我这样做了。
<Button IsVisible={Binding myObservableCollection.Count, Converter={StaticResource emptyToBooleanConverter}} />

我当时将myObservableCollection.Count传递给值转换器,并在集合为空时返回布尔值false。如果您需要ValueConverter的代码,我可以提供。顺便说一句,我正在使用Xamarin.Forms(MAUI)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接