我正在尝试向WPF中的TreeView中的叶节点添加复选框。如果我们在层次结构中有固定数量的级别并为每个级别使用HierarchicalDataTemplate,我知道如何执行此操作。但是当我想要这个时该怎么办:
-Node 1
- 节点1a(带复选框的叶节点)
- 节点1b
---节点1bI(带复选框的叶节点)
-Node 2
- 节点2a(带复选框的叶节点)
我将代码文件中的DataContext设置为DataTable。只有一张桌子,与它有关系。
DataContext = ds.MyDataTable;
XAML:
<UserControl x:Class="JostyWpfControls.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="240" Width="312">
<UserControl.Resources>
<HierarchicalDataTemplate x:Key="myTemplate"
ItemsSource="{Binding myDatasetRelation}">
<CheckBox IsChecked="{Binding IsChosen}">
<TextBlock Text="{Binding Description}"/>
</CheckBox>
</HierarchicalDataTemplate>
</UserControl.Resources>
<Grid>
<TreeView x:Name="treeView"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource myTemplate}">
</TreeView>
</Grid>
</UserControl>
这是有效的,但是给了我一个所有节点的chechbox。我只想让叶子节点有一个复选框。
答案 0 :(得分:4)
您可以在数据模板中使用触发器来确定该复选框是否可见:
<HierarchicalDataTemplate x:Key="myTemplate"
ItemsSource="{Binding myDatasetRelation}">
<StackPanel>
<CheckBox x:Name="CheckBox" IsChecked="{Binding IsChosen}"
Content="{Binding Description}" />
<TextBlock x:Name="LeafLabel" Text="{Binding Description}"
Visibility="Collapsed" />
</StackPanel>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding myDatasetRelation.Count}" Value="0">
<Setter TargetName="CheckBox" Property="Visibility" Value="Collapsed" />
<Setter TargetName="LeafLabel" Property="Visibility" Value="Visible" />
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
我不确定通过myDatasetRelation
绑定的值是否具有Count
属性,但如果没有,那么您可以使用Length
或找到其他方法来确定它是否为空或者不是(如果没有更简单的方法可能使用IValueConverter
。