我是WPF的新手,我在尝试使用自定义排序对CollectionViewSource进行排序时遇到了困难。情况如下:
我有一个使用参数调用的SearchView,它变成了它的datacontext,如下所示:
mainView.SetGlobalOverlay(New SearchView With {.DataContext = interventionViewModel})
在SearchView.xaml中,然后我将CollectionViewSource绑定到集合:
<CollectionViewSource x:Key="UnitsCollection"
Filter="UnitsCollection_Filter"
Source="{Binding Path=Units}" />
现在,我已经在另一个共享类中实现了IComparer接口。此比较器用于源代码中其他位置的ListCollectionView,并且工作正常。现在,我如何在CollectionViewSource上重用这个比较器?
答案 0 :(得分:13)
要为CollectionViewSource
使用自定义排序器,您必须等到加载ItemsControl
(例如列表框);然后,您可以使用ListCollectionView
的{{1}}属性获取View
。
如图所示,这是一个小例子,它以两种不同的方式显示整数列表:上面的列表框应用自定义排序顺序,而下面的列表框是未排序的:
MainWindow.xaml:
CollectionViewSource
MainWindow.xaml.cs:
<Window x:Class="WpfApplication27.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:clr="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="300">
<Window.Resources>
<CollectionViewSource x:Key="MyCollectionViewSource1" Source="{Binding RawData}" />
<CollectionViewSource x:Key="MyCollectionViewSource2" Source="{Binding RawData}" />
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<ListBox Grid.Row="0" Margin="5" Background="LightSkyBlue"
ItemsSource="{Binding Source={StaticResource MyCollectionViewSource1}}"/>
<ListBox Grid.Row="1" Margin="5" Background="LightYellow"
ItemsSource="{Binding Source={StaticResource MyCollectionViewSource2}}"/>
</Grid>
</Window>