我在我的视图模型中有ObservableCollection
,在我看来有CollectionViewSource
和ListBox
。带有生成/分组的WPF列表框 - 如何在项目重新分组时保持选择状态?
ListBox
绑定到CollectionViewSource
。 CollectionViewSource
绑定到ObservableCollection
,对项目进行排序并将它们排列成组。我通过CollectionViewSource
上的IsLiveGroupingRequested
和IsLiveSortingRequested
属性启用了实时排序和实时分组,因此无论何时底层视图模型对象发生更改,它们都会在ListBox
中重新排序并重新分组。这一切工作正常。
问题在于选择。如果我选择了ListBox
中的一个项目,并且由于视图模型对象以某种方式进行了更改而将其重新分组,则该项目在移动到新组时将被取消选择。
如何在选择的项目重新分组时保留选择?
下面是一个简单的修剪XAML示例,显示该问题。如果AllItems中某个对象的Category属性发生更改,则由于生动整形,该项目将被正确地重新分组。但是,如果选择了该项目,它将被取消选中。
<Grid>
<Grid.Resources>
<CollectionViewSource x:Key="MyItems" Source="{Binding AllItems}" IsLiveGroupingRequested="True" IsLiveSortingRequested="True">
<CollectionViewSource.SortDescriptions>
<componentModel:SortDescription PropertyName="Category" />
<componentModel:SortDescription PropertyName="Name" />
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Category" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Grid.Resources>
<ListBox ItemsSource="{Binding Source={StaticResource MyItems}}">
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListBox.GroupStyle>
</ListBox>
</Grid>
我已经在网上搜索了解决方案,但一直没能找到任何东西。我找到this thread,但没有发布解决方案。
我拉着我的头发试图让这个工作。我将不胜感激任何帮助!