Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Разные шаблоны у дочерних элементов в TreeView


Автор: interv 7.3.2013, 08:01
Дерево строиться по DataTable, каждая следующая ветка записана в столбце SubTable
Код

//table: DataTable 
if (!table.Columns.Contains("SubTable"))
    table.Columns.Add("SubTable", table.GetType());
foreach (DataRow row in table.Rows)
{
    DataTable subTable = new DataTable();
    // Заподнение ветки (дочерних элементов)
    row["SubTable"] = subTable; 
}

шаблон настроен так, что каждая следующая ветка имеет свой шаблон:
Код

<HierarchicalDataTemplate x:Key="Template2" ItemsSource ="{Binding Path=SubTable}" ItemTemplate="{StaticResource Template3}">
        <!--тут описание шаблона 2-->
</HierarchicalDataTemplate>

<HierarchicalDataTemplate x:Key="Template1" ItemsSource ="{Binding Path=SubTable}" ItemTemplate="{StaticResource Template2}">
        <!--тут описание шаблона 1-->
</HierarchicalDataTemplate>
И так далее

Проблемма появляется при создании элеменов, у которых дочерние элементы должны иметь разный шаблон, вообще не понимаю как это сделать:
  • Элемент1 (Template1)
    • Элемент3 (Template2)
      • Элемент7 (Template3_1)
      • Элемент8 (Template3_2)
    • Элемент4 (Template2)
  • Элемент2 (Template1)
    • Элемент5 (Template2)
    • Элемент6 (Template2)

Автор: interv 7.3.2013, 13:21
Решил проблемму при помощи ItemTemplateSelector
Код


<HierarchicalDataTemplate x:Key="Template3_1" ItemsSource ="{Binding Path=SubTable}">
        <!--тут описание шаблона 3.1-->
</HierarchicalDataTemplate>

<HierarchicalDataTemplate x:Key="Template3_2" ItemsSource ="{Binding Path=SubTable}">
        <!--тут описание шаблона 3.2-->
</HierarchicalDataTemplate>

<HierarchicalDataTemplate x:Key="Template2" ItemsSource ="{Binding Path=SubTable}" ItemTemplateSelector="{StaticResource trigerForTemplate3}">
        <!--тут описание шаблона 2-->
</HierarchicalDataTemplate>

<HierarchicalDataTemplate x:Key="Template1" ItemsSource ="{Binding Path=SubTable}" ItemTemplate="{StaticResource Template2}">
        <!--тут описание шаблона 1-->
</HierarchicalDataTemplate>


Код

public class TrigerDataTemplateSelector : DataTemplateSelector
{
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            //тут выбираем HierarchicalDataTemplate в зависимости от item
        }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)