2012-05-09 3 views
0

мне нужна помощь с HierarchicalDataTemplate ... Я пытаюсь построить TreeView для отображения некоторых иерархических данных так:HierarchicalDataTemplate вопрос

  • Ruleset < - (корень) -RuleA
    • RuleB
      • RuleC
      • RuleA .....
    • РЕШИЛ

RuleA, ... получены из того же полиси, что имеет

  • Тип
  • полиси [] Правила

Ruleset имеет

  • Имя
  • Список

мой код, насколько я получаю:

<TreeView x:Name="ruleSetTree" Margin="0,10,0,0" ItemsSource="{Binding Path=SelectedTypeRuleSet> 
      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate DataType="{x:Type engine:RuleSet}"> 
        <HierarchicalDataTemplate.ItemTemplate> 
         <HierarchicalDataTemplate x:Name="leafTemplate" 
           ItemsSource="{Binding Path=Rules}" 
           DataType="{x:Type engine:RuleBase}"> 
          <TextBlock Text="{Binding Path=Name}"/> 
         </HierarchicalDataTemplate> 
        </HierarchicalDataTemplate.ItemTemplate> 
        <TextBlock x:Name="hierarchyItem" Text="{Binding Path=TargetType}"/> 
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
</TreeView> 

То, что я вижу сейчас это имя Ruleset. Кнопка переключения TreeView скрыта. Я десериализую xml в мою модель RuleSet, чтобы получить данные для этого TreeView. RuleSet заполнен правильно ... может ли кто-нибудь дать руку, пожалуйста?

Спасибо!

ответ

0

Нет ItemsSource, указанный в первых HierarchicalDataTemplate. Не следует ли привязать его к свойству List вашего RuleSet?

0

Почему вы вставляете другой иерархический шаблон данных в существующий? Это может быть ошибкой. Тем более, что вы не указали ItemSource в своем первом шаблоне данных. Если все узлы типа RuleSet вы можете сделать это следующим образом:

<TreeView x:Name="ruleSetTree" Margin="0,10,0,0" ItemsSource="{Binding Path=SelectedTypeRuleSet> 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate DataType="{x:Type engine:RuleSet}" 
             ItemsSource="{Binding Path=Rules}"> 
       <StackPanel> 
        <TextBlock Text="{Binding Path=Name}"/> 
        <TextBlock Text="{Binding Path=TargetType}"/> 
       </StackPanel> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
</TreeView> 

UPDATE: Вот обновленная версия, которая должна соответствовать вашим требованиям. Это просто работает, хотя, если все дочерние узлы типа RuleBase

<UserControl.Resources> 
     <HierarchicalDataTemplate x:Key="RuleBaseTemplate" 
            ItemsSource="{Binding Rules}"> 
      <TextBlock Text="{Binding Name}"/> 
     </HierarchicalDataTemplate> 

     <HierarchicalDataTemplate x:Key="RuleSetTemplate" 
            ItemsSource="{Binding Rules}" 
            ItemTemplate="{StaticResource RuleBaseTemplate}"> 
      <StackPanel> 
       <TextBlock Text="{Binding Name}"/> 
       <TextBlock Text="{Binding TargetType}"/> 
      </StackPanel> 
     </HierarchicalDataTemplate> 
</UserControl.Resources> 
<!-- rest of the code --> 
<TreeView x:Name="ruleSetTree" Margin="0,10,0,0" 
      ItemsSource="{Binding SelectedTypeRuleSet}" 
      ItemTemplate="{StaticResource RuleSetTemplate}"/> 
+0

Первый узел является 'RuleSet', дочерние узлы' RuleBase'. –

+0

Я обновил свой пост. –

+0

Я обновил его снова. Там была ошибка. –

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