代码之家  ›  专栏  ›  技术社区  ›  viky

如何在代码隐藏中将TreeView项的IsExpanded属性更新为false?

  •  0
  • viky  · 技术社区  · 14 年前

    我正在使用WPF TreeView控件。我正在创建分层数据结构并将其分配给itemssource,它将自动生成treeviewitems。默认情况下,我将TreeViewItem的IsExpanded使用为true。但在特定情况下,我希望将ISexpanded属性设置为false。因此,TreeView加载不需要花费时间来生成所有项。由于当时没有对TreeViewItem实例的引用,如何在代码中设置它?

    编辑:

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   Robert Macnee    14 年前

    isexpanded默认值为false,所以我假设您有一个样式将默认值更改为true。如果将此样式更改为使用绑定(并在“特定操作”期间更改值),则未显式设置isexpanded的TreeView项将默认为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>
    
        2
  •  0
  •   Timores    14 年前

    这样做的一种方法是使用一个视图模型,即基于模型(数据)的UI抽象。如果在与树数据相关的ViewModel部分包含bool属性(例如isexpanded),则可以将TreeView项的isexpanded属性绑定到ViewModel的isexpanded属性。视图绑定到包含模型副本或引用的ViewModel。

    然后,展开或折叠树的部分变得和更新视图模型一样简单(后者需要实现inotifyPropertyChanged或定义依赖属性)。