![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
Dem0n13 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 4.12.2009 Где: Россия, Калуга Репутация: нет Всего: нет |
Здравствуйте!
Нашел в интернете контрол, унаследованный от treeview: http://blogs.windowsclient.net/ricciolocri...ew-control.aspx В примере, с которым он поставлялся, использовались xml-данные. Помогите пожалуйста с привязкой этого компонента к экземпляру вот такого класса:
Сам контрол выглядит так:
Задача состоит в том, чтобы отобразить в иерахическом порядке сам объект DT и его потомков Children Это сообщение отредактировал(а) Dem0n13 - 18.5.2011, 00:47 |
||||
|
|||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
В ItemsSource прописываете привязку к первоисточнику, то есть к корневым элементам дерева, а в ItemTemplate - шаблон данных. В качестве последнего, для отображения дерева, используется HierarhicalDataTemplae. Подробнее описано в МСДН.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Dem0n13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 4.12.2009 Где: Россия, Калуга Репутация: нет Всего: нет |
-Mikle-, в ItemSource уже писал
ItemsSource="{Binding Source={StaticResource DT}}" ItemsSource="{Binding DT}" ItemsSource="{Binding Source=DT}" где DT - существующий объект класса DiffTree : ObservableCollection<DiffItem> И все равно, проверяю, что привязывается - либо буквы "DT", либо вообще ничего(( Что я делаю не так? |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Где у вас свойство DT объявлено? Оно публичное?
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Dem0n13 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 4.12.2009 Где: Россия, Калуга Репутация: нет Всего: нет |
DT - это экземпляр ObservableCOllection, описан в классе главного окна, где и используется:
А еще только что попробовал
но все равно не работает. Проверяю все вышеперечисленные методы так: MessageBox.Show(qq.ItemsSource.ToString()); выдает исключения, что объекта нет. |
||||
|
|||||
-Mikle- |
|
||||||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
на выбор:
вариант 1)
вариант 2)
вариант 3)
Есть еще много способов как можно задать значение ItemsSource. примечание: Во всех трех вариантах не реализовано автообновления TreeView при изменении списка. -------------------- Если тебе плюют в спину, значит ты впереди... |
||||||||
|
|||||||||
Dem0n13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 4.12.2009 Где: Россия, Калуга Репутация: нет Всего: нет |
У меня задача сложнее, мне нужна двунаправленная связь. Но пока что, даже одноправленная не работает
![]() Может все дело в компоненте TreeListView? Но вроде унаследован он от TreeList, а все равно, примеры выше не работаю, хотя и все сдвинулось с мертвой точки. Теперь MessageBox.Show(qq.ItemsSource.ToString()); показывает, что привязка есть, а вот шаблон иерархических данных не работает. Что я делаю не так? Может поможет исходник разобраться? Помогите, пожалуйста, уже 2 дня бьюсь с привязками Добавлено: И еще... Чем отличается this.DataContext = this; в c# от DataContext="{Binding RelativeSource={RelativeSource Self}}" в xaml? У меня привязывается только с первым вариантом Это сообщение отредактировал(а) Dem0n13 - 18.5.2011, 22:14 Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Щас посмотрю проект.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
1) У тебя бардак в настройках солюшена, не знаю как так у тебя получилось. Открой Configuration Manager солюшена. У всех проектов должна стоять галочка Build и обязательно, чтоб стоял одинаковый Platform у всех.
2) Binding работает только со свойствами. Children в твоем коде это поле класса, а не свойство. 3) Я эксперимент проводил на обычном TreeView, твой не заработал и я не разбирался с ним. Придется смотреть тебе мануал на этот компонент.
Вот уже на этом этапе все заработало. Совет: когда имеешь дело с биндингом, возьми за правило реализовывать интерфейс INotifyPropertyChanged в моделях данных и DependencyProperty для типов наследованных от DependencyObject (все UI-элементы и еще много других от него наследованы). Для списков по возможности ObsevableCollection<?> (ты и так ее использовал тут) или любую другую реализующую интерфейс INotifyCollectionChanged. PS: на всякий случай, фраза "{Binding Source={StaticResource DT_HTemplate}}" безсмыслена и полностью эквивалентна "{StaticResource DT_HTemplate}" -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Dem0n13 |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 4.12.2009 Где: Россия, Калуга Репутация: нет Всего: нет |
Спасибо за потраченное время! В общем, с TreeView я разобрался, и правда все работает. Сделал так:
Теперь насчет TreeListView. Разбираться с тем, что было не стал, нашел другой пример с msdn. Объявляю следующим образом:
Шаблон практически без изменений выдает только первый уровень дерева. Я понимаю, что теперь нужно где-то сослаться на наш HierarchicalDataTemplate, но не знаю где... Начал разбирать шаблон от TreeListView, увидел следующие вещи: 1. Из реализации шаблона первой ячейки (которая со иконкой +):
Вот этот триггер срабатывает (все элементы стоят без плюсов). Естественно я нигде не определил, что свойство Children это и есть Items 2. Далее из шаблона TreeListViewItem:
ItemsPresenter, как я почитал, определяет визуальное положение "подложки" самого дерева. Я бы впихнул HierarchicalDataTemplate сюда, но необходимого свойства нет. Используемый контрол, на этот раз, унаследован уже от ListView. В оригинале заполнялся так:
Как мне добить уже это дерево? ![]() P.S.: обновленный исходник Это сообщение отредактировал(а) Dem0n13 - 20.5.2011, 16:37 Присоединённый файл ( Кол-во скачиваний: 11 ) ![]() |
||||||||||
|
|||||||||||
Dem0n13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 4.12.2009 Где: Россия, Калуга Репутация: нет Всего: нет |
Ура! Решение данной проблемы нашел!
http://social.msdn.microsoft.com/Forums/en...90-dd3cf3e9350b Краткое описание: в ресурсы вставил
Всем спасибо! |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |