我有一个带有属性A和B的自定义类Foo。我想在数据绑定控件中显示它。
我创建了一个班级Foos : BindingList<Foo>
。
为了更新Foos类的一些内部属性,我需要在列表中的项目上通知属性更改(我可以处理插入,删除等)。您将如何实现该功能?
我应该从支持它的框架中的某个对象继承Foo吗?我想我可以创建一些事件,通知我是否有变化,但这是应该做的方式吗?或者框架中是否有一些模式可以帮助我?
答案 0 :(得分:22)
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
类公开two events,在收集或修改集合时会通知您:
public void DoSomething()
{
BindingList<Foo> foos = getBindingList();
foos.ListChanged += HandleFooChanged;
}
void HandleFooChanged(object sender, ListChangedEventArgs e)
{
MessageBox.Show(e.ListChangedType.ToString());
}