拥有分层数据...我正在使用包含网格的树视图,并且该网格包含文本框......
我只是想在树视图中的网格运行时隐藏/显示一些列...在任何级别..无论父母/孩子......
答案 0 :(得分:0)
执行此操作的一种方法是使用ViewModel概念。 ViewModel是一个数据结构,表示应用程序的UI视图,它是UI通常需要的模型(数据)+信息。
在您的示例中,您可以拥有一个包装数据的新类(可通过名为Model的属性访问),并具有其他属性,如布尔值IsVisible。 INotifyPropertyChanged必须由此类
实现如果我复制并修改上述文章中显示的模板:
<TreeView.ItemTemplate>
<!-- Level 0 template leaves space for 2 child "Toggle" levels -->
<HierarchicalDataTemplate ItemsSource="{Binding Model.SubItems}">
<Grid Visibility={Binding IsVisible, Converter={StaticResource B2VConverter}}>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Task"/>
<ColumnDefinition SharedSizeGroup="Toggle"/>
<ColumnDefinition SharedSizeGroup="Toggle"/>
<ColumnDefinition SharedSizeGroup="Duration"/>
<ColumnDefinition SharedSizeGroup="Notes"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Model.Task}" Style="{StaticResource TextBlockStyle}"/>
<TextBlock Grid.Column="3" Text="{Binding Model.Duration}" Style="{StaticResource TextBlockStyle}"/>
<TextBlock Grid.Column="4" Text="{Binding Model.Notes}" Style="{StaticResource TextBlockStyle}"/>
</Grid>
...
新的东西(我无法加粗我添加的文本)网格级别的IsVisible属性设置和数据属性引用“模型”。已被添加。它通过您必须在资源级别声明的转换器绑定到新的IsVisible属性:
现在,当您想隐藏或显示树中的项目时,可以修改ViewModel。就如此容易。 这是对MVVM编程方式的粗略介绍。你会找到很多关于它的文献。它具有很多优点,例如单元测试UI逻辑的能力(即在哪种情况下树元素变得可见?)。
更简单,模块化的方式来执行您的请求是将IsVisible属性直接添加到模型中,但这是不鼓励的,因为它混合了苹果和橙子。对于一个非常小的程序来说可能没问题,这个程序使用了几天然后就被扔掉了。