的組頭我有一個相當棘手的問題:如何保存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