Question

J'ai une liste contenant des objets qui suivent cette structure. Ce ne sont pas les vraies classes avec lesquelles je travaille mais je devrais expliquer le concept.

CLASSES

public class BaseType{}
public class TypeA : BaseType{}
public class TypeB: BaseType
{
    public List<TypeA> TypeAList { get; private set; }
}

La liste à laquelle ItemsControl se lie est une Liste < BaseType >

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>

Maintenant, je m'attendrais à ce que tous les objets TypeA présents dans la propriété d'objet TypeB soient affichés dans le contrôle ItemsControl. À la place, je ne vois que les objets TypeB, affichés avec les styles définis pour HierarchicalDataTemplate. J'ai utilisé le même modèle de données dans un contrôle TreeView, où il affiche les éléments enfants bien.

  • Ne pouvez-vous pas utiliser un HierarchicalDataTemplate dans un ItemsControl?
  • Comment affichez-vous une relation parent-enfant dans un ItemsControl?
Était-ce utile?

La solution

Vous devez vraiment vous pencher sur la création de modèles et l'utilisation du contrôle TreeView, ou créer votre propre contrôle pour utiliser les données hiérarchiques.

Dans certaines situations, vous pourrez peut-être concevoir votre propre modèle de données pour un contrôle d'éléments standard dont les contrôles imbriqués se lient à l'élément, tel que (psuedo)

<HierarchicalDataTemplate>
    <Grid DataContext="{Binding}">
        <ListBox ItemsSource="{Binding TypeAList}" />
    </Grid>
</HierarchicalDataTemplate>

N'a pas essayé le code ci-dessus

Le contrôle doit connaître le modèle HierarchicalDataTemplate. Dans l'exemple ci-dessus, il utilise simplement ce dernier en tant que DataTemplate (HierarchicalDataTemplate est dérivé de DataTemplate pour la simplicité des styles et du type DependencyProperty pour ce modèle de données).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top