ビューモデルにObservableCollection
があり、CollectionViewSource
とListBox
が表示されています。ライブシェイプ/グループ化を使用したWPFリストボックス - アイテムが再グループ化されたときに選択を維持する方法?
ListBox
は、CollectionViewSource
に結びついています。 CollectionViewSource
は、ObservableCollection
にバインドし、アイテムをソートしてグループに整理します。 CollectionViewSource
のIsLiveGroupingRequested
とIsLiveSortingRequested
プロパティを使用してライブソートとライブグループ化が有効になっているため、基になるビューモデルオブジェクトが変更されるたびに、並べ替えられ、ListBox
で再グループ化されます。これはすべて正常に動作します。
問題は選択と関係しています。 ListBox
のアイテムを選択して、何らかの方法でビューモデルオブジェクトが変更されたためにグループ化された場合、そのアイテムは新しいグループに移動すると選択解除されます。
選択したアイテムを再度グループ化しても、選択を維持するにはどうすればよいですか?
ここでは、問題を示す簡単なトリムダウンXAMLの例を示します。 AllItems内のオブジェクトの1つの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が見つかりましたが、解決策が投稿されていませんでした。
私はこの作業をしようとしている私の髪を引っ張っています。私は大いに助けていただければ幸いです!