我在我的視圖模型中有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,但沒有發佈解決方案。
我拉着我的頭髮試圖讓這個工作。我將不勝感激任何幫助!