2013-06-27 69 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,但沒有發佈解決方案。

我拉着我的頭髮試圖讓這個工作。我將不勝感激任何幫助!

回答

相關問題