Разверните Root в TreeView, когда ItemSource изменился - PullRequest
1 голос
/ 15 апреля 2011

У меня есть ChildWindow в приложении Silverlight 4 с TreeView. ItemSource связан с ObservableCollection элементов в ViewModel. Когда открывается окно, элемент загружается из веб-службы.

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

Я пытался использовать ItemContainerGenerator.ItemChanged и OnItemsChanged в TreeView, но они оба выполняются до того, как сгенерированы элементы древовидного представления, поэтому команды раскрытия не будут работать.

Как мне заставить это работать?

Ответы [ 3 ]

1 голос
/ 15 апреля 2011

Попробуйте зарегистрироваться на событие CollectionChange в ObservableCollection и выполните там свои действия.

0 голосов
/ 18 апреля 2011

Я решил свою проблему, переопределив метод PrepareContainerForItemOverride в TreeView. Я задавался вопросом, почему это просто вызывается для корневого узла, но это работает.

public class ExpandedRootTreeView : TreeView
{
    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        TreeViewItem treeViewItem = element as TreeViewItem;

        if (treeViewItem != null) treeViewItem.IsExpanded = true;

        base.PrepareContainerForItemOverride(element, item);
    }
}

Спасибо всем, кто откликнулся.

0 голосов
/ 15 апреля 2011

Получите из TreeView и создайте свойство IsRootItemExpanded и создайте то же имя в ViewModel.В set accesser проверьте, если значение true, тогда вызовите ваш метод, как этот ExpandToDepth (1) Когда itemssource необходимо обновить, тогда установите свойство IsRootItemExpanded true.Необходимо привязать IsRootItemExpanded TreeView к IsRootItemExpanded ViewModel.

...