c# – 在ObservableCollection上使用CollectionViewSource进行列表框实时排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 在ObservableCollection上使用CollectionViewSource进行列表框实时排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2354字,纯文字阅读大概需要4分钟。
内容图文
![c# – 在ObservableCollection上使用CollectionViewSource进行列表框实时排序](/upload/InfoBanner/zyjiaocheng/804/d9f225bce5104899b0bee2a46325939a.jpg)
我想启用绑定到ObservableCollection的ListBox项的实时排序;我还想通过我的XAML标记(如果可能的话)启用实时排序.事实上,列表在应用程序启动时正确排序,但是当将新项目添加到ObservableCollection时,只是将项目附加(未排序)到ListBox.
在我的viewmodel中,我有以下公共属性:
public ObservableCollection<Equipment> EquipmentList { get; set; }
Equipment是Entity Framework中的一个自动生成的类,它包含一个名为’Description’的公共字符串属性.这是我的排序目标.
我的XAML具有以下DataTemplate,旨在实现实时排序:
<DataTemplate x:Key="EquipmentDescriptionTemplate"
DataType="{x:Type e:Equipment}">
<DataTemplate.Resources>
<CollectionViewSource x:Key="SortedEquipmentList"
Source="{Binding Path=Description,
Mode=OneWay,
UpdateSourceTrigger=PropertyChanged}"
IsLiveSortingRequested="True">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Description"
Direction="Ascending"/>
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.LiveSortingProperties>
<clr:String>Description</clr:String>
</CollectionViewSource.LiveSortingProperties>
</CollectionViewSource>
</DataTemplate.Resources>
<TextBlock Text="{Binding Path=Description}" />
</DataTemplate>
最后是XAML ListBox项:
<ListBox x:Name="EquipmentList"
ItemsSource="{Binding Path=EquipmentList, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
ItemTemplate="{StaticResource EquipmentDescriptionTemplate}"
IsSynchronizedWithCurrentItem="True"
SelectedItem="{Binding EquipmentSelection, UpdateSourceTrigger=PropertyChanged}"
Grid.ColumnSpan="2" Grid.Row="1" Margin="5,5,5,5"/>
我在绝望的尝试中添加了许多额外的属性,以便让实时排序工作(当有疑问时,猜测很疯狂!).我把它们留在了所以人们可以看到我尝试过的东西,然后窃笑.
如何通过XAML启用实时ListBox排序?
解决方法:
您需要将ItemsSource绑定到CollectionViewSource,而不是绑定到底层集合:
<ListBox x:Name="EquipmentList"
ItemsSource="{StaticResource SortedEquipmentList}"
...
/>
将CollectionViewSource放在页面资源字典中的上方.将其源绑定到底层集合(“EquipmentList”):
<CollectionViewSource x:Key="SortedEquipmentList"
Source="{Binding EquipmentList.View}"
IsLiveSortingRequested="True">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Description" Direction="Ascending"/>
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.LiveSortingProperties>
<clr:String>Description</clr:String>
</CollectionViewSource.LiveSortingProperties>
</CollectionViewSource>
内容总结
以上是互联网集市为您收集整理的c# – 在ObservableCollection上使用CollectionViewSource进行列表框实时排序全部内容,希望文章能够帮你解决c# – 在ObservableCollection上使用CollectionViewSource进行列表框实时排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。