Chr*_*ler 7 .net c# wpf wpf-4.5
我有一个ObservableCollection
在我的视图模型中,CollectionViewSource
并且ListBox
在我看来.
在ListBox
绑定到CollectionViewSource
.在CollectionViewSource
绑定到ObservableCollection
,整理物品,并安排他们到组.我通过IsLiveGroupingRequested
和IsLiveSortingRequested
上的属性启用了实时排序和实时分组CollectionViewSource
,因此每当底层视图模型对象发生更改时,它们都会重新排序并重新分组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>
Run Code Online (Sandbox Code Playgroud)
我在互联网上搜索了解决方案,但根本找不到任何东西.我找到了这个帖子,但没有发布解决方案.
我正在试着让我的头发工作.我非常感谢任何帮助!
目前没有简单的解决方案。
我可以看到两种解决方案:
1) 用户手动停止实时更新。允许处理跳跃数据很容易出错。
示例:MS 的 WCF 日志查看器中的暂停按钮。
2) 在开始更新数据之前,请记住所选项目。当更新完成时,只需返回选择。
示例:如何防止 WPF DataGrid 在项目更新时取消选择 SelectedItem?