【问题标题】:How to Update TreeViewItem's IsExpanded property to false in code behind?如何在后面的代码中将 TreeViewItem 的 IsExpanded 属性更新为 false?
【发布时间】:2010-04-05 09:16:06
【问题描述】:

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

编辑:

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

【问题讨论】:

    标签: c# wpf treeview


    【解决方案1】:

    IsExpanded 默认为 false,因此我假设您有一个 Style 将默认值更改为 true。如果您更改此样式以使用绑定(并在“特定操作”期间更改值),则未明确设置 IsExpanded 的 TreeViewItems 将默认为 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】:

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

      然后,扩展或折叠树的部分变得像更新 ViewModel 一样简单(需要实现 INotifyPropertyChanged 或定义 Dependency 属性)。

      【讨论】:

      • @Timores 感谢您的回复,但它不适合我的需要,因为在这种情况下,我需要在 ViewModel 中的每个对象中携带此信息。我将仅在一种特定情况下使用此信息。我正在寻找一种方法,以便我可以在执行此特定操作时将 TreeView 中所有 TreeViewItem 的默认行为设置为折叠,并在此操作完成时设置回展开状态。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      相关资源
      最近更新 更多