我正在使用WPF TreeView控件。我正在创建一个分层数据结构并将其分配给ItemsSource,它将自动生成TreeviewItems。默认情况下,我使用TreeViewItem的IsExpanded为true。但在特定情况下,我想将IsExpanded属性设置为false。因此,树视图加载不需要时间来生成所有项目。如何在代码中设置它,因为那时我没有引用TreeViewItem的实例?
我正在寻找一种方法,以便我可以在我的TreeView中将所有TreeViewItem的默认行为设置为在执行特定操作时折叠,并在此操作完成时重新设置为Expanded。
答案 0 :(得分:1)
IsExpanded默认为false,因此我假设您有一个Style将默认值更改为true。如果更改此样式以使用绑定(并在“特定操作”期间更改值),则没有显式设置IsExpanded的TreeViewItem将默认为false:
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<CheckBox x:Name="chkDefaultExpanded" Content="Default Expanded"/>
<TreeView>
<TreeView.Resources>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding ElementName=chkDefaultExpanded, Path=IsChecked}"/>
</Style>
</TreeView.Resources>
<TreeViewItem Header="Do">
<TreeViewItem Header="A">
<TreeViewItem Header="1"/>
<TreeViewItem Header="2"/>
<TreeViewItem Header="3"/>
</TreeViewItem>
<TreeViewItem Header="B"/>
<TreeViewItem Header="C"/>
</TreeViewItem>
<TreeViewItem Header="Re">
<TreeViewItem Header="D">
<TreeViewItem Header="4"/>
<TreeViewItem Header="5"/>
<TreeViewItem Header="6"/>
</TreeViewItem>
<TreeViewItem Header="E"/>
<TreeViewItem Header="F"/>
</TreeViewItem>
</TreeView>
</StackPanel>
</Grid>
答案 1 :(得分:0)
这样做的一种方法是使用ViewModel,即基于模型(数据)的UI抽象。如果在与树数据相关的ViewModel部分中包含bool属性(例如IsExpanded),则可以将TreeViewItem的IsExpanded属性绑定到ViewModel的IsExpanded属性。该视图绑定到ViewModel,其中包含模型的副本或引用。
然后,扩展或折叠树的部分就像更新ViewModel(需要实现INotifyPropertyChanged或定义依赖属性)一样简单。