WPF - 集合中属性的OnPropertyChanged

Ada*_*ney 4 .net c# wpf mvvm

在视图模型中,我有一组名为"ClassA"的项目,称为"MyCollection".ClassA有一个名为"IsEnabled"的属性.

class MyViewModel 
{
    List<ClassA> MyCollection { get; set; }

    class ClassA { public bool IsEnabled { get; set; } }
}
Run Code Online (Sandbox Code Playgroud)

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

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

MyCollection[2].IsEnabled = false;
Run Code Online (Sandbox Code Playgroud)

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

OnPropertyChanged("MyCollection");
OnPropertyChanged("MyCollection[2].IsEnabled");
Run Code Online (Sandbox Code Playgroud)

两者都不起作用.

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

Tho*_*que 12

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

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

EDIT2:调用PropertyChanged事件更短


Sco*_*ock 6

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