Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Wpf 使用ObservableCollection实现INotifyPropertyChanged_Wpf_Observablecollection_Inotifypropertychanged - Fatal编程技术网

Wpf 使用ObservableCollection实现INotifyPropertyChanged

Wpf 使用ObservableCollection实现INotifyPropertyChanged,wpf,observablecollection,inotifypropertychanged,Wpf,Observablecollection,Inotifypropertychanged,我想从数据库中提取数据以显示在组合框中,然后允许用户从该组合框中选择值,并通过添加/删除按钮将其添加到列表框中。由于它实现了INotifyPropertyChanged和CollectionChanged,我是否能够使用ObservableCollections保存要绑定到组合框的数据库值?对不起,如果这是一个基本问题,我大约一个月前开始学习WPF 我读过萨夏·巴伯写的非常好的作品 我已经浏览了上的MSDN页面 使用ObservableCollection与我知道没有实现INotifyPrope

我想从数据库中提取数据以显示在组合框中,然后允许用户从该组合框中选择值,并通过添加/删除按钮将其添加到列表框中。由于它实现了INotifyPropertyChanged和CollectionChanged,我是否能够使用ObservableCollections保存要绑定到组合框的数据库值?对不起,如果这是一个基本问题,我大约一个月前开始学习WPF

我读过萨夏·巴伯写的非常好的作品

我已经浏览了上的MSDN页面


使用ObservableCollection与我知道没有实现INotifyPropertyChanged的列表相比,有哪些优点/缺点?

如果组合框中的项目没有更改,即您没有添加/删除/更新项目,然后列表可能适合您的需要。如果您在影响列表属性时手动通知列表属性已更改,则可观察到的集合也会更改

public List<X> MyList
{
    get
    {
        ...
    }

    set
    {
        if (... != value)
        {
            ... = value;
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("MyList"));
            }
        }
    }
}

....

this.MyList = new List<X> { new X(...), new X(...) };

如果您计划在组合框中添加/删除或更新项,而不创建新的MyList对象,即使用此.MyList.add…,则使用ObservableCollection,它可以在更新集合时发出通知,以便更新绑定。

您可能需要注意的事项

不要将INotifyPropertyChanged的ObservableCollection实现与其包含的对象的实现混淆


如果ObservableCollection中某个对象的某个属性发生更改,UI将不会反映该属性,除非该对象也实现了INotifyPropertyChanged。不要指望ObservableCollection会为您解决这个问题。

我确实计划更新绑定到组合框的列表,谢谢!!一个问题:在您的示例中,列表是否必须实现INotifyPropertyChanged?i、 e.公共列表MyList:INotifyPropertyChanged在示例中,列表本身不实现INotifyPropertyChanged。它是一个包含List类型属性的类。好吧,如果我有一个自定义类,它在ObservaleCollection中存储了多个属性,ObservaleCollection将不知道这些属性中是否有一个发生了更改,除非该自定义类实现了INotifyPropertyChanged?但是,如果可观测集合只包含从未更改过的字符串,那么这就不是问题,对吗?谢谢