Вопрос

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

классы

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

Список , к которому привязывается ItemsControl , является List<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>

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

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

Решение

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

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

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

Еще не пробовали приведенный выше код

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top