gpt4 book ai didi

c# - 可观察的 CollectionViewSource

转载 作者:行者123 更新时间:2023-11-30 14:12:20 24 4
gpt4 key购买 nike

我正在尝试设置一个从 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 是此接口(interface)的基本实现)。要查看对集合中的项目所做的更改(例如,修改特定项目的特定属性),您的项目对象应实现 INotifyPropertyChanged

CollectionViewSource 是 UI 和实际集合之间的层,它提供了对集合显示方式(排序、过滤、分组等)的一些额外控制。如果基础数据支持通知(通过实现上述接口(interface)),它只会将通知传递给 UI。

关于c# - 可观察的 CollectionViewSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17918993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com