具有自定义排序的CollectionViewSource

时间:2014-06-10 17:43:28

标签: wpf vb.net sorting collectionviewsource

我是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上重用这个比较器?

1 个答案:

答案 0 :(得分:13)

要为CollectionViewSource使用自定义排序器,您必须等到加载ItemsControl(例如列表框);然后,您可以使用ListCollectionView的{​​{1}}属性获取View

如图所示,这是一个小例子,它以两种不同的方式显示整数列表:上面的列表框应用自定义排序顺序,而下面的列表框是未排序的:

screen shot

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>