WPF HierarchicalDataTemplate& ItemsControl
-
10-07-2019 - |
質問
この構造に従うオブジェクトを含むリストがあります。これは私が作業している実際のクラスではありませんが、概念を説明する必要があります。
クラス
public class BaseType{}
public class TypeA : BaseType{}
public class TypeB: BaseType
{
public List<TypeA> TypeAList { get; private set; }
}
ItemsControlがバインドするリストは、 List&lt; BaseType&gt;
XAML
<ItemsControl>
<ItemsControl.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:TypeB}" ItemsSource = "{Binding Path=TypeAList}">
<DataTemplate.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="18"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</DataTemplate.Resources>
<Grid>
<Ellipse Fill="Gold"/>
<StackPanel>
<TextBlock Margin="3,3,3,0"
Text="{Binding Path=Description}"/>
<TextBlock Margin="3,0,3,7"
Text="{Binding Path=Name}"/>
</StackPanel>
</Grid>
</HierarchicalDataTemplate>
<ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
これで、TypeBオブジェクトプロパティで見つかったすべてのTypeAオブジェクトがItemsControlに表示され、代わりにHierarchicalDataTemplateに定義されたスタイルで表示されたTypeBオブジェクトのみが表示されます。 TreeViewコントロールで同じdatatemplateを使用しました。このテンプレートでは、子アイテムが正常に表示されます。
- ItemsControlでHierarchicalDataTemplateを使用できませんか?
- ItemsControlで親子関係を表示するにはどうしますか?
解決
TreeViewコントロールのテンプレート化と操作を検討するか、階層データを操作する独自のコントロールを作成する必要があります。
状況によっては、(psuedo)などのネストされたコントロールがアイテムにバインドされる通常のアイテムコントロール用に独自のデータテンプレートを設計できる場合があります
<HierarchicalDataTemplate>
<Grid DataContext="{Binding}">
<ListBox ItemsSource="{Binding TypeAList}" />
</Grid>
</HierarchicalDataTemplate>
上記のコードを試していない
コントロールは、HierarchicalDataTemplateを認識する必要があります。上記の例では、コントロールは単にそれをDataTemplateとして使用しています(HierarchicalDataTemplateは、スタイルとそのデータテンプレートのDependencyPropertyのタイプを簡単にするためにDataTemplateから派生しています)。
所属していません StackOverflow