Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检测BindingList中项目属性的更改<;T>;?_C#_.net_Collections - Fatal编程技术网

C# 如何检测BindingList中项目属性的更改<;T>;?

C# 如何检测BindingList中项目属性的更改<;T>;?,c#,.net,collections,C#,.net,Collections,我有一个具有属性a和B的自定义类Foo。我想在数据绑定控件中显示它 我已经创建了一个类Foos:BindingList 为了更新Foos类的一些内部属性,需要通知我列表中项目的属性更改(我可以处理插入、删除等)。您将如何实现该功能 我应该从支持Foo的框架中的某个对象继承Foo吗?我想我可以创建事件来通知我是否发生了更改,但这是应该做的吗?或者框架中是否有某种模式可以帮助我?Foo应该实现和接口 public void Foo : INotifyPropertyChanged { pub

我有一个具有属性a和B的自定义类Foo。我想在数据绑定控件中显示它

我已经创建了一个类
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
不是线程安全的。这是正确的实现(使用局部变量):