2

WPF の TreeView のリーフ ノードにチェックボックスを追加しようとしています。階層に一定数のレベルがあり、各レベルに HierarchicalDataTemplate を使用している場合、これを行う方法を知っています。しかし、これが必要な場合の対処方法: -ノード
1
-- ノード 1a (チェックボックス付きの葉ノード)
-- ノード 1b
--- ノード 1bI (チェックボックス付きの葉ノード) -ノード
2
-- ノード 2a (チェックボックス付きの葉ノード)

コード ファイルの DataContext を DataTable に設定しました。それ自体との関係を持つ、1 つのテーブルのみ。

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>

これは機能していますが、すべてのノードにチェックボックスが表示されます。リーフノードにチェックボックスを付けたいだけです。

4

1 に答える 1

5

データテンプレートのトリガーを使用して、チェックボックスを表示するかどうかを決定できます。

<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>

viaにバインドされた値にプロパティがあるかどうかはわかりませんがmyDatasetRelationCountプロパティがない場合は、Length空であるかどうかを判断する他の方法を使用または見つけることができます(おそらく、IValueConverterより単純なアプローチが利用できない場合は使用します。

于 2009-09-26T22:27:44.697 に答える