我的应用程序中有一个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();
答案 0 :(得分:0)
根据我的经验,Template.LoadContent()非常不寻常,在WPF中不推荐使用。
检索CollectionView的常用方法是从托管ItemsSource的ItemsControl中获取它:
ICollectionView collectionView = CollectionViewSource.GetDefaultView(lb_Vertraege.ItemsSource);
然后将您的排序说明添加到Filter委托:
collectionView.Filter = ... // your sort descriptions