如何检测BindingList 中项目属性的更改?
我有一个具有属性A和B的自定义类Foo。我想在数据绑定控件中显示它。
我创建了一个类Foos : BindingList
。
为了更新Foos类的一些内部属性,我需要在列表中的项目上通知属性更改(我可以处理插入,删除等)。 你会如何实现这个function?
我应该从支持它的框架中的某个对象inheritanceFoo吗? 我想我可以创建一些事件,通知我是否有变化,但这是应该做的方式吗? 或者框架中是否有一些模式,这对我有帮助?
Foo应该实现INotifyPropertyChanged
和INotifyPropertyChanging
接口。
public void Foo : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(String info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } private int _someValue; public int SomeValue { get { return _someValue; } set { _someValue = value; NotifyPropertyChanged("SomeValue"); } } }
BindingList
应该自动挂钩到您的事件处理程序,并且每当您设置类调用PropertyChanged
事件处理程序时,您的GUI现在应该更新。
[编辑添加:]此外, BindingList
类公开了两个事件 ,这些事件在添加或修改集合时通知您:
public void DoSomething() { BindingList foos = getBindingList(); foos.ListChanged += HandleFooChanged; } void HandleFooChanged(object sender, ListChangedEventArgs e) { MessageBox.Show(e.ListChangedType.ToString()); }
- 将更多项添加到非常大的HashSet 时出现OutOfMemoryException
- 无法加载文件或程序集“System.Net.Http”或其依赖项之一
- 使用volatile关键字与使用Interlocked类相比有什么优势吗?
- 为什么我可以通过索引访问KeyCollection / ValueCollection中的项目,即使它没有实现IList(Of Key)?
- 什么东西吞没了未经处理的exception?
- 运算符’==’不能应用于linq到实体的’System.Guid’和’string’类型的操作数
- entity framework中推荐的身份生成方法是什么?
- 原生C ++和C#互操作
- 无法修改的变量