c# – 可观察的CollectionViewSource
发布时间:2020-12-16 01:56:21 所属栏目:百科 来源:网络整理
导读:我正在尝试设置一个ListBox,从CollectionViewSource获取它的数据.我想要发生的是,当我更新底层数据源时,ListBox也会更新.我的Xaml看起来像这样…… Window.Resources ObjectDataProvider x:Key="AppTests" ObjectType="{x:Type Application:AppTestProvider}
我正在尝试设置一个ListBox,从CollectionViewSource获取它的数据.我想要发生的是,当我更新底层数据源时,ListBox也会更新.我的Xaml看起来像这样……
<Window.Resources> <ObjectDataProvider x:Key="AppTests" ObjectType="{x:Type Application:AppTestProvider}" MethodName="GetAppTests" /> <CollectionViewSource x:Key="cvs" Source="{StaticResource AppTests}"> <CollectionViewSource.SortDescriptions> <scm:SortDescription PropertyName="Priority" Direction="Ascending" /> </CollectionViewSource.SortDescriptions> </CollectionViewSource> </Window.Resources> <Grid> <ListBox x:Name="TestList" ItemsSource="{Binding Source={StaticResource cvs}}"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding TestName}" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Grid> 这显示数据正常但如果我更改基础数据,那么更改不会出现在网格上,直到我在后面的代码中调用cvs.View.Refresh()方法. 如何让这个“可观察”,以便自动发生变化? 注意:使用CVS的原因是基于底层对象中的属性为列表提供排序. 解决方法
要查看对集合本身所做的更改(例如添加和删除项),集合应实现INotifyCollectionChanged(ObservableCollection是此接口的基本实现).要查看对集合中的项目所做的更改(例如,修改特定项目上的特定属性),您的项目对象应实现INotifyPropertyChanged.
CollectionViewSource是UI和实际集合之间的一个层,它提供了对集合显示方式的一些额外控制(排序,过滤,分组等).如果底层数据支持通知(通过实现上述接口),它只会将通知传递给UI. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |