C# 包含列表的对象的可观察集合

C# 包含列表的对象的可观察集合,c#,wpf,data-binding,observablecollection,C#,Wpf,Data Binding,Observablecollection,我使用ObservableCollection作为DataGrid的ItemsSource进行数据绑定。集合包含复杂类型的对象。这种类型的属性之一是字符串列表 就目前而言,当我从代码中更新这个列表属性时,UI中没有任何变化(主绑定工作正常)。所以,我的问题是:这是一种预期的行为吗?也许我不应该使用列表作为类型的一部分,但也应该使用ObservableCollection 更新 模式设置为单向。使用实现接口的集合而不是列表(如)。然后,对集合的更改将填充到ui。当您更新列表时,必须调用INotif

我使用ObservableCollection作为DataGrid的ItemsSource进行数据绑定。集合包含复杂类型的对象。这种类型的属性之一是字符串列表

就目前而言,当我从代码中更新这个列表属性时,UI中没有任何变化(主绑定工作正常)。所以,我的问题是:这是一种预期的行为吗?也许我不应该使用列表作为类型的一部分,但也应该使用ObservableCollection

更新


模式设置为单向。

使用实现接口的集合而不是列表(如)。然后,对集合的更改将填充到ui。

当您更新列表时,必须调用INotifyPropertyChange,否则ui将无法更新列表结果


INotifyPropertyChange表示此处项源中发生了一些更改,因此请更新它。

这也可能有帮助:


是的,这是预期的行为。可观察集合仅通知其自身内容的更改,即添加、删除、重新排序

您所看到的是对ObservaleCollection中的元素的更改—如果您希望看到对放入的类的更改,那么您的元素必须实现INotifyPropertyChanged


因此,当前:如果复杂对象上的列表属性发生更改,您将看不到它,但是,如果将其更改为observablecollection,则可以在子项控件(如组合框)中看到对该集合的更改,但如果将集合对象更改为另一个对象,则不会看到更改。因此,如果未实现INotifyPropertyChanged,则应在应用绑定之前设置collectionproperty。

没有帮助,因为与旧值的比较将是相同的。此外,外部集合没有更改-无需更新其视图(性能)内部集合必须实现INotifyCollectionChanged。@Dammy:INotifyCollectionChanged无疑会起作用。。但我使用INotifyCollectionChanged进行属性绑定,它适合我。我所知道的方式告诉..Jehof是正确的,但是,您可能还需要使用HierarchicalDataTemplate(取决于视图)。类型应将ICollection或其他接口公开为属性,支持字段应实现INotifyCollectionChanged,比如ObservableCollection。这正是我一小时前做的——ObservableCollection,而不是整个结构上的List+INotifyPropertyObject(真不好意思,我应该早点想到它)。我认为你的回答可以解决我的问题。