質問

この構造に従うオブジェクトを含むリストがあります。これは私が作業している実際のクラスではありませんが、概念を説明する必要があります。

クラス

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から派生しています)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top