CollectionViewSource.SortDescriptions 使用并行创建绑定项时不起作用
CollectionViewSource.SortDescriptions not work when binding items are created using Parallel
我正在使用 VS2013、.net4.5、WPF 桌面应用程序。
Xaml:
<CollectionViewSource x:Key="cvs" Source="{Binding ObsPasses, Mode=OneWay}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="StartDate"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
cs:
this.ObsPasses = new ObservableCollection<PassViewModel>(
Passes.AsParallel().Select(x => new PassViewModel(x)));
如果我删除.AsParallel()
,那么项目是排序的,如果添加,项目是无序的。
但我觉得有点奇怪。 SortDescription 保证 UI 项无论在后台以何种顺序添加项都将被排序?
在您的代码演示中,您没有绑定到 CollectionViewSource,而是绑定到集合本身。尝试替换
<ItemsControl ItemsSource="{Binding ObsFoos, Mode=OneWay}" >
和
<ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}" >
快速建议,如果您可以尝试在 CollectionViewSource 上添加 IsLiveFilteringRequested="True"。
如果有效请告诉我。
我正在使用 VS2013、.net4.5、WPF 桌面应用程序。
Xaml:
<CollectionViewSource x:Key="cvs" Source="{Binding ObsPasses, Mode=OneWay}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="StartDate"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
cs:
this.ObsPasses = new ObservableCollection<PassViewModel>(
Passes.AsParallel().Select(x => new PassViewModel(x)));
如果我删除.AsParallel()
,那么项目是排序的,如果添加,项目是无序的。
但我觉得有点奇怪。 SortDescription 保证 UI 项无论在后台以何种顺序添加项都将被排序?
在您的代码演示中,您没有绑定到 CollectionViewSource,而是绑定到集合本身。尝试替换
<ItemsControl ItemsSource="{Binding ObsFoos, Mode=OneWay}" >
和
<ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}" >
快速建议,如果您可以尝试在 CollectionViewSource 上添加 IsLiveFilteringRequested="True"。
如果有效请告诉我。