2013-06-27 35 views
6

我在我的视图模型中有ObservableCollection,在我看来有CollectionViewSourceListBox带有生成/分组的WPF列表框 - 如何在项目重新分组时保持选择状态?

ListBox绑定到CollectionViewSourceCollectionViewSource绑定到ObservableCollection,对项目进行排序并将它们排列成组。我通过CollectionViewSource上的IsLiveGroupingRequestedIsLiveSortingRequested属性启用了实时排序和实时分组,因此无论何时底层视图模型对象发生更改,它们都会在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,但没有发布解决方案。

我拉着我的头发试图让这个工作。我将不胜感激任何帮助!

回答

相关问题