Как использовать {Binding Path = /} для непосредственного отображения третьего уровня вложенных коллекций? - PullRequest
1 голос
/ 09 февраля 2011

У меня очень вложенная структура сущностей, подобная этой:

DataObject> Университеты (Список)> Колледжи (Список)> Студенты (Список)> Проекты (Список)

Я хочу связать TreeView непосредственно с моим DataObject как:

myTreeView.ItemSource = DataObject.Universities;

        DataTemplate dataTemplate = new DataTemplate();
        dataTemplate.DataType = typeof(Student);
        FrameworkElementFactory spFactoryDeliverable = new FrameworkElementFactory(typeof(TextBlock));
        spFactoryDeliverable.Name = "spFactoryDeliverable";
        spFactoryDeliverable.SetBinding(TextBlock.TextProperty, new Binding("Colleges/Students/Name"));
        dataTemplate.VisualTree = spFactoryDeliverable;
        rdTreeDeliverables.ItemTemplate = dataTemplate;

для отображения узлов с именами студентов. Но проблема в том, что он будет отображать имена только студентов одного колледжа. Он не будет отображать записи второго или любого другого отчета колледжа.

Любое предложение / идея?

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

{Binding Path = /} показывает текущий элемент из списка, он никоим образом не перебирает список - если вы хотите показать вложенные списки, вам нужен какой-то тип вложенных шаблонов данных ( либо HierarchicalDataTemplate, либо DataTemplate с ItemsControl в нем - в зависимости от элемента управления, с которым будет использоваться этот шаблон).

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

1 голос
/ 09 февраля 2011

Не создавайте шаблоны в коде, это большая боль и подвержено ошибкам.Пожалуйста, предоставьте код для реализации ваших классов.

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

Не думаю, что вы также можете сразу перейти на глубокий уровень.Это довольно сложная директива, которая требует объединения всех вложенных коллекций в одну.

{Binding Path=/} возвращает текущий элемент, поэтому, если вам нужны все названия колледжа, вам нужно использовать путь Colleges/Students, который возвращаетКоллекция студентов для текущего колледжа.Если вам нужны имена всех студентов во всех колледжах, которые, вероятно, потребуют вложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...