0

ビューモデルからデータを動的にバインドするwpfアプリケーションにツリービューがあります。

<TreeView Grid.Column="0"
          Grid.Row="0"
          ItemsSource="{Binding Main}"
          HorizontalAlignment="Stretch"
          Name="treeView1"
          VerticalAlignment="Stretch"
          Height="auto"
          Width="auto"
          SelectedItemChanged="treeView1_SelectedItemChanged"
          HorizontalContentAlignment="Stretch"
          VerticalContentAlignment="Top"
          Margin="0,0,5,5">
  <TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
      <Setter Property="IsExpanded"
              Value="{Binding IsExpanded, Mode=TwoWay}" />
      <Setter Property="IsSelected"
              Value="{Binding IsSelected, Mode=TwoWay}" />
      <Setter Property="FontWeight"
              Value="Normal" />
      <Style.Triggers>
        <Trigger Property="IsSelected"
                 Value="True">
          <Setter Property="FontWeight"
                  Value="Bold" />
        </Trigger>
      </Style.Triggers>
    </Style>
  </TreeView.ItemContainerStyle>
  <TreeView.Resources>
    <HierarchicalDataTemplate DataType="{x:Type local:MViewModel}"
                              ItemsSource="{Binding Children}">
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Mname}" />
      </StackPanel>
    </HierarchicalDataTemplate>
    <HierarchicalDataTemplate DataType="{x:Type local:FViewModel}"
                              ItemsSource="{Binding Children}">
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding FName}" />
      </StackPanel>
    </HierarchicalDataTemplate>
    <HierarchicalDataTemplate DataType="{x:Type local:CViewModel}"
                              ItemsSource="{Binding Children}">
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Com}" />
      </StackPanel>
    </HierarchicalDataTemplate>
    <DataTemplate DataType="{x:Type local:LViewModel}">
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Lo}" />
      </StackPanel>
    </DataTemplate>
  </TreeView.Resources>
</TreeView>

ツリービュー全体に、子が上記のツリービュー要素である「ファミリー」というヘッダーを追加する必要があります。どうすればツリービュー全体にヘッダーを追加できますか? そのヘッダーをクリックすると、すべての Mname などが表示されるようになります。この問題で私を助けてください。

編集:

利用した

  <HierarchicalDataTemplate  DataType="{x:Type TextBlock}" ItemsSource="{Binding Children}">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Family" />
                        </StackPanel>
  </HierarchicalDataTemplate>

私のTreeviewResourceで。しかし、それでもツリーの親を割り当てることはできません。

編集2:

<TreeView>
   <TreeViewItem ItemsSource="{Binding Main}" Header="Family">
      <TreeViewItemContainerStyle>
      //..
      </TreeViewItemContainerStyle>
      <TreeView.Resources>
      //..
      </TreeView.Resources>
   </TreeViewItem>
</TreeView>

その表示エラー。

しかし、私が以下のようにすると、

<TreeView>
       <TreeViewItemContainerStyle>
      //..
      </TreeViewItemContainerStyle>
      <TreeView.Resources>
      //..
      </TreeView.Resources>
   <TreeViewItem ItemsSource="{Binding Main}" Header="Family"/>
</TreeView>

ルート項目が設定されました。ただし、子の最初のセットのみが表示されます。子要素の子が表示されていません。

4

1 に答える 1

2

TreeViewExpander要素でラップできます。

<Expander Header="Family">
    <TreeView>
        ...
    <TreeView>
</Expander>

しかし、あなたの質問から、どの要素を として使用したいかは明確ではありませんHeader

編集:

したがって、ツリーのルート要素が必要な場合は、xamlで明示的に追加できます。

<TreeView> <!--ItemsSource you should set on a TreeViewItem-->
    <TreeViewItem ItemsSource="{Binding Main}" Header="Family">
        <TreeViewItem.ItemContainerStyle>
            ...
        </TreeViewItem.ItemContainerStyle>
        <TreeViewItem.Resources>
            ...
        </TreeViewItem.Resources>         
    </TreeViewItem>
<TreeView>
于 2013-01-22T04:25:00.477 に答える