如何在代码后面将TreeViewItem的IsExpanded属性更新为false?

时间:2010-04-05 09:16:07

标签: c# wpf treeview

我正在使用WPF TreeView控件。我正在创建一个分层数据结构并将其分配给ItemsSource,它将自动生成TreeviewItems。默认情况下,我使用TreeViewItem的IsExpanded为true。但在特定情况下,我想将IsExpanded属性设置为false。因此,树视图加载不需要时间来生成所有项目。如何在代码中设置它,因为那时我没有引用TreeViewItem的实例?

编辑:

我正在寻找一种方法,以便我可以在我的TreeView中将所有TreeViewItem的默认行为设置为在执行特定操作时折叠,并在此操作完成时重新设置为Expanded。

2 个答案:

答案 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或定义依赖属性)一样简单。