У меня довольно сложная проблема:
Я использую элемент управления ListView, для которого для ItemsSource установлено значение CollectionViewSource, включая PropertyGroupDescription, для группировки элементов ListView. CollectionViewSource выглядит следующим образом:
<CollectionViewSource x:Key="ListViewObjects">
<CollectionViewSource.Source>
<Binding Path="CurrentListViewData"/>
</CollectionViewSource.Source>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="ObjectType" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
В ListView, который я использую, настройте заголовки групп следующим образом:
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Margin" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="True">
<Expander.Header>
<DockPanel>
<TextBlock Text="{Binding Path=Items[0].ObjectType />
</DockPanel>
</Expander.Header>
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListView.GroupStyle>
Как видите, для свойства IsExpanded Expander установлено значение true. Это означает, что всякий раз, когда ListView обновляется, все элементы управления Expander раскрываются.
Однако я хочу сохранить последнее состояние каждого Расширителя. Я не смог найти способ сохранить список состояний Expander для ObjectType. Я экспериментировал со связанным HashTable и Converter, но мне не удалось предоставить ObjectType в качестве ConverterParameter, потому что он всегда передавался как строка. Но это не может быть решением в любом случае.
Может кто-нибудь дать мне подсказку или идею для решения, пожалуйста? :)