Silverlight TreeView - загрузка данных при расширении узла - PullRequest
5 голосов
/ 22 ноября 2008

Есть ли способ загружать дочерние узлы только при расширении родительского узла? Проблема, с которой я сталкиваюсь, заключается в том, что значок «развернуть» не отображается, если у узла нет дочерних элементов. Так как я не хочу загружать детей до тех пор, пока не будет нажата иконка, у меня остался небольшой улов 22.

Ответы [ 4 ]

4 голосов
/ 08 октября 2009

Сначала прочитайте этот пост: http://bea.stollnitz.com/blog/?p=55

Во-вторых, наследуйте TreeViewItem и TreeView:

public class TreeViewItemEx : TreeViewItem {
    protected override DependencyObject GetContainerForItemOverride() {
        TreeViewItemEx tvi = new TreeViewItemEx();
        Binding expandedBinding = new Binding("IsExpanded");
        expandedBinding.Mode = BindingMode.TwoWay;
        tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);
        return tvi;
    }
}

public class TreeViewEx : TreeView {
    protected override DependencyObject GetContainerForItemOverride() {
        TreeViewItemEx tvi = new TreeViewItemEx();
        Binding expandedBinding = new Binding("IsExpanded");
        expandedBinding.Mode = BindingMode.TwoWay;
        tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);

        return tvi;
    }
}

В-третьих, привязка свойства вашей Модели к IsExpanded.

1 голос
/ 15 января 2009

Вполне возможно, что древовидные элементы управления загружают дочерние узлы по требованию, и вы можете сделать это с помощью Silverlight TreeView. Когда вы заполняете корневые узлы, если данные для этого поступают, например, из базы данных, то для каждого узла также возвращается, есть ли у него дочерние элементы или нет, если он затем добавляет одного фиктивного дочернего элемента, это заставит элемент управления поставить + рядом с Это. Обработайте расширенное событие, и в этом случае посмотрите, является ли дочерний узел фиктивным узлом, если он удаляется, получите дочерние элементы из базы данных и добавьте их.

1 голос
/ 22 ноября 2008

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

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

0 голосов
/ 22 ноября 2008

Я тоже смотрел на это. Я думаю, вам нужно написать свой собственный подкласс TreeNode, который загружает дочерние узлы по требованию.
Один из подходов, который я использовал в формах окон TreeView, состоял в том, чтобы добавить пустой дочерний узел к каждому узлу, а затем удалить его, когда узел был расширен, и нужны были реальные дочерние узлы. Проблема этого подхода в том, что вы получаете ложные расширяемые узлы, но если вы можете жить с этим, то это простое решение.

...