WPF HierarchicalDataTemplate & ItemsControl - PullRequest
       18

WPF HierarchicalDataTemplate & ItemsControl

0 голосов
/ 03 августа 2009

У меня есть список, содержащий объекты, которые следуют этой структуре. Это не настоящие классы, с которыми я работаю, но они должны объяснить концепцию.

КЛАССЫ

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

Список, к которому привязывается ItemsControl: List<BaseType>

1012 * 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>

Теперь я хотел бы увидеть все объекты TypeA, найденные в свойстве объекта TypeB, которые будут отображаться в ItemsControl, вместо этого я вижу только объекты TypeB, отображаемые со стилями, определенными для HierarchicalDataTemplate. я использовал ту же табличку данных в элементе управления TreeView, где он отлично отображает дочерние элементы.

  • Разве вы не можете использовать HierarchicalDataTemplate в ItemsControl?
  • Как вы отображаете отношения родитель-потомок в ItemsControl?

1 Ответ

1 голос
/ 06 августа 2009

Вам действительно нужно изучить шаблоны и работать с элементом управления TreeView или создать собственный элемент управления для работы с иерархическими данными.

В некоторых ситуациях вы можете создать собственный шаблон данных для обычного элемента управления, чьи вложенные элементы управления привязываются к элементу, например (psuedo)

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

Не пробовал код выше

Элемент управления должен знать о HierarchicalDataTemplate - и в приведенном выше примере элемент управления просто использует его как DataTemplate (HierarchicalDataTemplate наследуется от DataTemplate для простоты стилей и типа DependencyProperty для этого шаблона данных).

...