WPF – 集合中属性的OnPropertyChanged

在视图模型中,我有一个名为“ClassA”的项目集合,称为“MyCollection”。 ClassA有一个名为“IsEnabled”的属性。

class MyViewModel { List MyCollection { get; set; } class ClassA { public bool IsEnabled { get; set; } } } 

我的视图有一个绑定到MyCollection的数据网格。 每行都有一个按钮,其“IsEnabled”属性绑定到ClassA的IsEnabled属性。

当视图模型中的条件发生更改以使MyCollction列表中的某个特定项需要禁用时,我将IsEnabled属性设置为false:

 MyCollection[2].IsEnabled = false; 

我现在想要通过OnPropertyChanged事件通知此更改的视图,但我不知道如何引用集合中的特定项目。

 OnPropertyChanged("MyCollection"); OnPropertyChanged("MyCollection[2].IsEnabled"); 

两者都不起作用。

如何通知查看此更改? 谢谢!

ClassA需要实现INotifyPropertyChanged:

 class ClassA : INotifyPropertyChanged { private bool _isEnabled; public bool IsEnabled { get { return _isEnabled; } set { if (value != _isEnabled) { _isEnabled = value; OnPropertyChanged("IsEnabled"); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } 

编辑:并使用像斯科特所说的ObservableCollection

EDIT2:调用PropertyChanged事件更短

不要使用List,而是尝试使用ObservableCollection。 此外,修改ClassA以使其实现INotifyPropertyChanged,特别是对于IsEnabled属性。 最后,修改MyViewModel类,使其实现INotifyPropertyChanged,尤其是MyCollection属性。