在CollectionViewSource中更改SortDescription后更新ListBox

时间:2014-11-18 11:30:12

标签: c# wpf listbox collectionviewsource

我的应用程序中有一个ListBox,有一个CollectionViewSource作为ItemsSource。在CollectionViewSource中是一个SortDescription。一切正常。

但是现在我有一个事件会改变SortDescription。这很好,但ItemsSource不会刷新。当我尝试使用CollectionViewSource.View.Refresh()更新ItemsSource而不是因为CollectionViewSource.View为null而成为一个错误。

以下是我使用的代码:

CollectionViewSource:

<Grid.Resources>
    <CollectionViewSource Source="{Binding Path=Vertraege}" x:Key="VertraegeSource">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="Vertrag.Gruppe.ID" Direction="Ascending" />
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
</Grid.Resources>

ListBox

<ListBox Name="lb_Vertraege" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" ItemTemplate="{StaticResource VertragsListBoxTemplate}" ItemsSource="{Binding Source={StaticResource VertraegeSource}}" ScrollViewer.VerticalScrollBarVisibility="Visible">    

有什么想法,我可以做些什么来在修改SortDescription后更新ItemsSource?在片刻,我尝试使用这个C#代码:

ControlTemplate template = this["LeistungserbringerVertraegeTemplate"] as ControlTemplate;
Grid grid = template.LoadContent() as Grid;

CollectionViewSource viewSource = grid.FindResource("VertraegeSource") as CollectionViewSource;

viewSource.SortDescriptions.Clear();
viewSource.SortDescriptions.Add(new System.ComponentModel.SortDescription("VertragsID", System.ComponentModel.ListSortDirection.Ascending));

viewSource.View.Refresh();

1 个答案:

答案 0 :(得分:0)

根据我的经验,Template.LoadContent()非常不寻常,在WPF中不推荐使用。

检索CollectionView的常用方法是从托管ItemsSource的ItemsControl中获取它:

ICollectionView collectionView = CollectionViewSource.GetDefaultView(lb_Vertraege.ItemsSource);

然后将您的排序说明添加到Filter委托:

collectionView.Filter = ... // your sort descriptions