2009-08-03 2 views
0

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

КЛАССЫ

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, отображаемом в Ite msControl, вместо этого я вижу только объекты TypeB, отображаемые со стилями, определенными для HierarchicalDataTemplate. Я использовал тот же шаблон данных в элементе управления TreeView, где он отображает дочерние элементы в порядке.

  • Можете ли вы не использовать Иерархический шаблон DATATemplate в ItemsControl?
  • Как вы собираетесь показывать родительские отношения с дочерними элементами в ItemsControl?

ответ

1

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

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

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

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

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

Смежные вопросы