在集合视图源中更改排序说明后更新列表框

本文关键字:说明 更新 列表 排序 视图 集合 | 更新日期: 2023-09-27 18:30:52

我的应用程序中有一个ListBox,有一个CollectionViewSource作为ItemsSource。在 CollectionViewSource 中有一个 SortDescription。那里会很好用。

但是现在我有一个事件,那里将更改排序描述。这工作正常,但项目源不会刷新。当我尝试使用 CollectionViewSource.View.Refresh() 更新 ItemsSource 时,我变成了一个错误,因为 CollectionViewSource.View 为空。

这是我使用的代码:

收藏视图源:

<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 Name="lb_Vertraege" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" ItemTemplate="{StaticResource VertragsListBoxTemplate}" ItemsSource="{Binding Source={StaticResource VertraegeSource}}" ScrollViewer.VerticalScrollBarVisibility="Visible">    

有想法,修改排序描述后我可以做些什么来更新项目来源?目前,我使用此 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();

在集合视图源中更改排序说明后更新列表框

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

检索集合视图的常用方法是从承载 ItemsSource 的 ItemsControl 获取它:

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

然后将排序说明添加到筛选器委托:

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