GridViewColumnCollection を使用する MultiColumn TreeView があります。私の状況では、列の数もヘッダー名もわかりません。それは実行時の発見です。
したがって、コードでこれらの列を作成し、それらに動的にバインドする必要があります。
わかりました - 作成はとても簡単です:
GridViewColumn c = new GridViewColumn();
c.Header = "Next Column";
myTree.Columns.Add(c);
ここでつまずいたところ-viewModelの「MyName」プロパティにバインドしたいとします。
Binding myBinding = new Binding(??);
myBinding.Source = ??
BindingOperations.SetBinding(myTree,GridViewColumn.???? , myBinding);
これでテンプレートは
<DataTemplate x:Key="CellTemplate_Name">
<DockPanel>
<ToggleButton x:Name="Expander"
Margin="{Binding Level,
Converter={StaticResource LevelToIndentConverter},
RelativeSource={RelativeSource AncestorType={x:Type l:TreeListViewItem}}}"
ClickMode="Press"
IsChecked="{Binding Path=IsExpanded,
RelativeSource={RelativeSource AncestorType={x:Type l:TreeListViewItem}}}"
Style="{StaticResource ExpandCollapseToggleStyle}" />
<TextBlock Text="{Binding Name}" />
.
.
.
<Style TargetType="{x:Type l:TreeListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type l:TreeListViewItem}">
<StackPanel>
<Border Name="Bd"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<GridViewRowPresenter x:Name="PART_Header"
Columns="{Binding Path=Columns,
RelativeSource={RelativeSource AncestorType={x:Type l:TreeListView}}}"
Content="{TemplateBinding Header}" />
</Border>
<ItemsPresenter x:Name="ItemsHost" />
</StackPanel>
XAML での列の挿入とバインディングは次のように表示されます。
<l:TreeListView x:Name="myTree" ItemsSource="{Binding MySource}">
<l:TreeListView.Columns>
<GridViewColumn x:Name="GridViewColumn0" CellTemplate="{StaticResource CellTemplate_Name}"
Header="Name" />
<GridViewColumn Width="60"
DisplayMemberBinding="{Binding Description}"
Header="Description" />
ここで SetBinding に関するヘルプをいただければ幸いです。指がなくなるまで探しました。
更新: 優れた答え:
GridViewColumn c = new GridViewColumn();
c.Header = "Next Column";
myTree.Columns.Add(c);
Binding myBinding = new Binding("MyName");
myBinding.Source = viewModel;
BindingOperations.SetBinding(myTree.Columns[myTree.Columns.Count - 1],
GridViewColumn.HeaderProperty,
myBinding);
バインディングはヘッダーに対して完全に機能するようになりました-どうもありがとう。