C# CollectionViewSource实时排序不起作用
我创建了一个用户控件,其中包含一个通过CollectionViewSource绑定的ListBox。列表框中有复选框供用户进行多项选择。我希望列表与顶部选中的复选框一起排序。我希望当用户选择或取消选择某个内容时,这项功能就会起作用。我似乎找不到任何东西可以通过xaml实现这一点。我做错了什么 在我的xaml中C# CollectionViewSource实时排序不起作用,c#,wpf,xaml,collectionviewsource,C#,Wpf,Xaml,Collectionviewsource,我创建了一个用户控件,其中包含一个通过CollectionViewSource绑定的ListBox。列表框中有复选框供用户进行多项选择。我希望列表与顶部选中的复选框一起排序。我希望当用户选择或取消选择某个内容时,这项功能就会起作用。我似乎找不到任何东西可以通过xaml实现这一点。我做错了什么 在我的xaml中 <CollectionViewSource x:Key="SortedItems" Source="{Binding Items, Ele
<CollectionViewSource x:Key="SortedItems"
Source="{Binding Items, ElementName=Selector}"
IsLiveSortingRequested="True">
<CollectionViewSource.LiveSortingProperties>
<System:String>IsSelected</System:String>
</CollectionViewSource.LiveSortingProperties>
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="IsSelected"
Direction="Descending" />
<scm:SortDescription PropertyName="CodeDescriptionText" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
当选
和我的列表框
<ListBox x:Name="ItemsControl"
SelectionMode="Multiple"
ItemsSource="{Binding Source={StaticResource SortedItems}}"
ItemTemplate="{Binding ItemTemplate, ElementName=Selector}"
ItemContainerStyle="{StaticResource ListBoxItemStyle}"
Grid.Row="1"
Grid.ColumnSpan="3">
在您的项目模板中,是否将bool
属性绑定到复选框。是否选中了属性?如果是,那么您应该能够将该属性设置为SortDescription.PropertyName
属性,就像您所做的那样。如果没有,那么这就是您需要做的。我也有同样的问题,最终我发现问题出在数据源上,我怀疑您的问题与我的问题相同
虽然CollectionViewSource
可以使用多种不同类型的数据源,但并非所有数据源都可以使用实时排序。为确保一切顺利进行,最好对数据源使用INotifyPropertyChanged
项的observedcollection
但是,如果您必须使用自定义集合类而不是ObservableCollection
,那么请确保该类实现IList
,而不仅仅是泛型IList
。如果不这样做,则很可能会禁用实时排序。为了确保所有其他领域的工作顺利进行,我强烈建议您也为it部门实施INotifyCollectionChanged
和INotifyPropertyChanged
无论使用哪个集合类,其中包含的项都必须实现INotifyPropertyChanged
。没有别的办法了。这是哪里?“Source=“{Binding Items,ElementName=Selector}”Items是我的ViewModel中的一个集合如果您省略LiveSortingProperties集合(但仍将IsLiveSortingRequested设置为true),默认情况下它将使用SortDescriptions中的属性。是my Checkbox.IsChecked绑定到IsSelected属性。