現在、子のすべてのレベルを最も遠くまで表示するアイテムのツリー ビューがあります。最初のレベルの子供だけを表示するにはどうすればよいですか? HierarchicalDataTemplate
おそらく間違ったアプローチですか?レベル 2 以降の子を折りたたむだけでは十分ではありません。
4 に答える
データソースのフィルター処理されたバージョンを使用して、必要なレベルのみが含まれるようにすると、HierarchialDataTemplate を問題なく使用できます。
DataTemplate
の代わりに、を使用してHierarchicalDataTemplate
ください。
編集:了解しました。いくつかのオプションがあります。上記のトミーの推薦は良いものでエレガントです。もう1つのオプションは、子を表示したくないアイテムのTreeViewItemのControlTemplateをオーバーライドして、エキスパンダー領域を非表示にすることです。
データを操作しないと、1 つのレベルの子だけを表示することはできません。コントロールには、表示されるノードの深さを決定できるプロパティが必要でした。
この解決策は私に思い浮かび、非常に明白でした。私は 2 つのフラット ツリー ビューを使用するだけで、2 番目のビューSelectedItem
は最初のビューに依存しています。HierarchicalDataTemplate
まったく必要ありません。ただの共通点DataTemplate
。
私が理解しているように、トップレベルのノードとそれらの1レベルの子が必要であり、それ以上は必要ありません(したがって、全体で2レベルのノードがあります)。次に、XAML で実行する場合は、2 つのテンプレートを使用して実行できます。
<Grid>
<Grid.Resources>
<DataTemplate x:Key="TemplateLeaf">
<TextBlock Text="{Binding Text}" /> <!-- Whatever leaf view you want -->
</DataTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Items}" ItemTemplate="{StaticResource TemplateLeaf}" x:Key="TemplateNode">
<TextBlock Text="{Binding Text}" />
</sdk:HierarchicalDataTemplate>
</Grid.Resources>
<sdk:TreeView ItemsSource="{Binding Items}" ItemTemplate="{StaticResource TemplateNode}" />
</Grid>
(これは Silverlight バージョンですが、同じです)。デフォルトでは、HierarchicalDataTemplate
はそれ自体を独自の として使用しますが、必要に応じItemTemplate
て次のレベルの他のテンプレート (プレーンを含むDataTemplate
) に置き換えることができます。