在视图模型中,我有一组名为“ClassA”的项目,名为“MyCollection”。 ClassA有一个名为“IsEnabled”的属性。
class MyViewModel
{
List<ClassA> MyCollection { get; set; }
class ClassA { public bool IsEnabled { get; set; } }
}
我的视图有一个绑定到MyCollection的数据网格。每行都有一个按钮,其“IsEnabled”属性绑定到ClassA的IsEnabled属性。
当视图模型中的条件发生变化,MyCollction列表中的某个特定项需要禁用时,我将IsEnabled属性设置为false:
MyCollection[2].IsEnabled = false;
我现在想通过OnPropertyChanged事件通知View的变化,但我不知道如何引用集合中的特定项目。
OnPropertyChanged("MyCollection");
OnPropertyChanged("MyCollection[2].IsEnabled");
两者都不起作用。
如何通知查看此更改?谢谢!
答案 0 :(得分: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));
}
}
编辑:并使用像Scott所说的ObservableCollection
EDIT2:调用PropertyChanged事件更短
答案 1 :(得分:6)
不使用List,而是尝试使用ObservableCollection。此外,修改您的ClassA,以便它实现INotifyPropertyChanged,特别是对于IsEnabled属性。最后,修改MyViewModel类,使其实现INotifyPropertyChanged,尤其是对于MyCollection属性。