2009-09-09 6 views
0

У меня есть элемент управления Silverlight TreeView, который я динамически заполняю при щелчке по конкретному узлу. Например, я загружаю первое поколение (уровень) узлов, а затем, когда пользователь нажимает на один из узлов, я использую событие Selected для заполнения дочерних узлов этого узла и т. Д. И т. Д. Я отправляю обратно из своей базы данных bool значение с каждым значением узла, которое указывает, имеют ли новые узлы дочерние узлы.Программно показать стрелку расширения на Silverlight TreeView

Я хочу установить стрелку расширения, чтобы показать перед новыми узлами, у которых есть ребенок, но улов в том, что его дети еще не будут заполнены. Я подумал, что, возможно, значение HasChild для моего значения bool, но HasChild доступен только для чтения. Любые предложения были бы очень оценены.

ответ

1

Просто добавьте пустой treeviewitem, когда он рухнул, чтобы показать стрелку.

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

Установите UserState на родительский treeviewitem или id при выполнении вызова GetChildrenAsync.

Когда они приходят, UserState должен быть этим родительским деревом или идентификатором, если вы обнаружите, что родительский объект, который вы только что установили, является источником данных для e.Result.

+0

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

+0

Слишком плохо, моя работа хорошо работает. Вы уверены, что освобождаете существующих детей, прежде чем добавлять их снова? Можете ли вы сказать, какой метод или компонент является источником ошибки? – Paully

+0

У меня есть две функции для заполнения узлов: одна, которая выполняет начальную заливку, и одну, которая выполняет все дочерние подпоследовательности. Моя первая функция будет полностью заполнена. В одном примере у меня 10 записей, у 4 из которых есть дети (пустые дети). Когда я запускаю функцию заполнения дочерних элементов, если узел содержит более одного дочернего узла с дочерними узлами, он дает мне необработанную ошибку, говорящую, что узел уже существует с этим именем (я называю все узлы с идентификатором узла и я 've проверено, что нет избыточности данных.) Вы хотите увидеть мой код? –

0

Если вы знакомы с свойствами зависимостей, вы можете создать свойство зависимостей, которое может быть установлено вами в коде и gettable в xaml, чтобы оно могло быть связано.

Это позволит вам использовать ValueConverter для визуализации видимости стрелки.

+0

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

Неизвестное Ошибка в Silverlight приложение не может установить только для чтения HasItems собственности. в System.Windows.Controls.TreeViewItem.OnHasItemsPropertyChanged (и т.д., бла, бла ..)

Вот код, который я использовал, чтобы попытаться обновить Dependency Property моего TreeViewItem:

TreeViewItem TVI = новый TreeViewItem() {Заголовок = x.UserName, Name = x.UserName}; tvi.SetValue (TreeViewItem.HasItemsProperty, true);

Возможно, что-то мне что-то не хватает. Спасибо! –

+0

Я думаю, что HasItems - это просто отражение того, является ли количество элементов более чем 0. Таким образом, вы бы не установили его напрямую, скорее, убедитесь, что у него есть предметы :) –

+0

Мне нужно подделать его так, чтобы он думал, что у него есть предметы без фактического наличия предметов, заполненных в то время. –

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