C# 如何检测BindingList中项目属性的更改<;T>;?
我有一个具有属性a和B的自定义类Foo。我想在数据绑定控件中显示它 我已经创建了一个类C# 如何检测BindingList中项目属性的更改<;T>;?,c#,.net,collections,C#,.net,Collections,我有一个具有属性a和B的自定义类Foo。我想在数据绑定控件中显示它 我已经创建了一个类Foos:BindingList 为了更新Foos类的一些内部属性,需要通知我列表中项目的属性更改(我可以处理插入、删除等)。您将如何实现该功能 我应该从支持Foo的框架中的某个对象继承Foo吗?我想我可以创建事件来通知我是否发生了更改,但这是应该做的吗?或者框架中是否有某种模式可以帮助我?Foo应该实现和接口 public void Foo : INotifyPropertyChanged { pub
Foos:BindingList
为了更新Foos类的一些内部属性,需要通知我列表中项目的属性更改(我可以处理插入、删除等)。您将如何实现该功能
我应该从支持Foo的框架中的某个对象继承Foo吗?我想我可以创建事件来通知我是否发生了更改,但这是应该做的吗?或者框架中是否有某种模式可以帮助我?Foo应该实现和接口
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<Foo> foos = getBindingList();
foos.ListChanged += HandleFooChanged;
}
void HandleFooChanged(object sender, ListChangedEventArgs e)
{
MessageBox.Show(e.ListChangedType.ToString());
}
public void DoSomething()
{
BindingList foos=getBindingList();
foos.ListChanged+=HandleFooChanged;
}
void HandleFooChanged(对象发送方,ListChangedEventArgs e)
{
Show(例如ListChangedType.ToString());
}
测试。。。我想这就是我要寻找的。Foos类中的哪个事件会引起火灾PropertyChanged处理程序?请记住,我需要在Foos类中做一些工作(基本上是修改一些内部字典)。当任何类设置Foo.SomeValue属性时,Foo实例将引发PropertyChanged事件处理程序。您可以(如果愿意)直接在Foo实例上或通过BindingList.ListChanged钩住此事件处理程序。非常感谢。不过,我不能给你更多的支持:)请注意,在这种情况下,NotifyPropertyChanged
不是线程安全的。这是正确的实现(使用局部变量):