C# 具有实时成型/分组的列表框-当项目重新分组时如何保持选择?
我的视图模型中有一个C# 具有实时成型/分组的列表框-当项目重新分组时如何保持选择?,c#,.net,wpf,wpf-4.5,C#,.net,Wpf,Wpf 4.5,我的视图模型中有一个observateCollection,视图中有一个CollectionViewSource和ListBox ListBox绑定到CollectionViewSource。CollectionViewSource绑定到ObservableCollection,对项目进行排序并将其分组。我通过CollectionViewSource上的IsLiveGroupingRequested和IsLiveSortingRequested属性启用了实时排序和实时分组,因此每当基础视图模型对
observateCollection
,视图中有一个CollectionViewSource
和ListBox
ListBox
绑定到CollectionViewSource
。CollectionViewSource
绑定到ObservableCollection
,对项目进行排序并将其分组。我通过CollectionViewSource
上的IsLiveGroupingRequested
和IsLiveSortingRequested
属性启用了实时排序和实时分组,因此每当基础视图模型对象更改时,它们都会在列表框中重新排序和分组。这一切都很好
这个问题与选择有关。如果我在列表框
中选择一个项目,然后由于视图模型对象以某种方式发生更改而对其重新分组,则该项目在移动到新组时将取消选择
当所选项目重新分组时,如何保留所选内容?
下面是一个简单的精简XAML示例,显示了这个问题。如果AllItems中某个对象的“类别”属性发生更改,则该项目将正确地重新分组,这要归功于live shaping。但是,如果选择了该项目,它将变为未选择
<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>
目前没有简单的解决方案
我可以看到两种解决方案:
1) 按用户手动停止实时更新。
允许使用跳转数据时容易出错
示例:来自MS的WCF日志查看器中的暂停按钮
2) 在开始更新数据之前,请记住所选项目。更新完成后,只需返回所选内容
例如: