的组头我有一个相当棘手的问题:如何保存IsExpanded状态在ListView
我使用的是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属性设置为true。这意味着每当ListView刷新时,所有Expander控件都被展开。
但是我确实想保存每个扩展器的最后一个状态。我一直无法找到一种方法来保存每个ObjectType的扩展器状态列表。我正在试验一个绑定的HashTable和一个Converter,但是我没有提供ObjectType作为ConverterParameter,因为它总是作为一个字符串传递的。但这可能不是解决方案。
有人可以给我一个提示或解决方案的想法吗? :)
你确定你真正的问题不是你目前的设计迫使你刷新列表视图吗? – 2010-05-11 16:05:27
通过调用NotifyPropertyChanged(“CurrentListViewData”)刷新ListView。我不知道该怎么做。 – 2010-05-12 08:53:23