具有实时整形/分组的WPF ListBox - 如何在重新组合项目时保持选择?

Chr*_*ler 7 .net c# wpf wpf-4.5

我有一个ObservableCollection在我的视图模型中,CollectionViewSource并且ListBox在我看来.

ListBox绑定到CollectionViewSource.在CollectionViewSource绑定到ObservableCollection,整理物品,并安排他们到组.我通过IsLiveGroupingRequestedIsLiveSortingRequested上的属性启用了实时排序和实时分组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)

我在互联网上搜索了解决方案,但根本找不到任何东西.我找到了这个帖子,但没有发布解决方案.

我正在试着让我的头发工作.我非常感谢任何帮助!

Art*_*tru 2

目前没有简单的解决方案。

我可以看到两种解决方案:

1) 用户手动停止实时更新。允许处理跳跃数据很容易出错。

示例:MS 的 WCF 日志查看器中的暂停按钮。

2) 在开始更新数据之前,请记住所选项目。当更新完成时,只需返回选择。

示例:如何防止 WPF DataGrid 在项目更新时取消选择 SelectedItem?