【问题标题】:WPF - OnPropertyChanged for a property within a collectionWPF - 集合中的属性的 OnPropertyChanged
【发布时间】:2009-06-05 14:30:20
【问题描述】:

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

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

    class ClassA { public bool IsEnabled { get; set; } }
}

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

当视图模型中的条件发生变化以致需要禁用 MyColllction 列表中的一个特定项目时,我将 IsEnabled 属性设置为 false:

MyCollection[2].IsEnabled = false;

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

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

两者都不起作用。

如何通知视图此更改?谢谢!

【问题讨论】:

    标签: c# .net wpf mvvm


    【解决方案1】:

    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 事件的时间

    【讨论】:

    • 不需要 ObservableCollection - 实现 INotifyPropertyChanged 就足够了。谢谢!
    • 好吧,当 IsEnabled 发生更改时得到通知就足够了,但是如果在 MyCollection 中添加或删除项目,除非它是 ObservableCollection(或任何实现 INotifyCollectionChanged 的​​类),否则不会通知您)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      相关资源
      最近更新 更多