Prog. Pages.

среда, 1 сентября 2010 г.

Хозяйкена заметку1. TreeView и отображение диковинных структур.

Хозяйке на заметку:
1.Если не работает сложный биндинг, то стоит разбить задачу этого биндинга на мелкие подзадачи и проверить каждую из них на простых элементах, типа TextBlock.

Специфика задачи:
Нужно было отобразить данные в TreeView. Данные устроены особым образом:
МенеджерПриложения содержит хранилище, в нем есть коллекция, содержащая проекты.
У каждого проекта также есть хранилище, в котором есть коллекция документов (разных типов).
Нужно показать в дереве взаимоотношения проектов и документов.
К сожалению сходу этого не получилось, и долго ковырял волосы на затылке, в поисках решения проблемы. А все почему? А потому что из-за того, что Хранилище - абстрактный класс, и коллекция хранящаяся в нём так же должна была абстрагироваться, от типа, объекты которого хранятся в ней. И вследствие этого коллекцию я объявил, как коллекцию объектов Object, соответственно неявное привидение не срабатывало.
Решение: Упаковал все типы, которые мы будем хранить в интерфейс IObject, и Object поменял на IObject.

К слову.. Любые данные можно отобразить в TreeView благодаря конструкции
<HierarchicalDataTemplate DataType="{x:Type Docs:IDocument}">
            <TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
В данном случае все объекты типа Idocument будут отображены как TextBlock, поле Text которого привязан к свойству Name отображаемого элемента.
Так же, если элемент содержит в себе другие, можно передать элементу коллекцию следующих и шаблон их отображения. Шаблон можно заменить такой же конструкцией, только определённой для другого типа.

Комментариев нет:

Отправить комментарий