Загрузка по-требованию дочерних элементов TreeViewItem в Silvierlight Версия для печати 14/10/09

Отчего-то в Silverlight не работает байндинг к свойству "IsExpanded" у элемента TreeViewItem (в WPF с этим все в порядке) в результате сделать загрузку дочерних узлов по-требованию можно только ручками подключив байндинг. Решение подсмотрел в посте Bea Stollnitz: How can I expand items in a TreeView? – Part II. Итак:

  1. Наследуем классы TreeView и TreeViewItem и ручками подключаем байндинг.
    1. public class TreeViewItemEx : TreeViewItem {
    2.   protected override DependencyObject GetContainerForItemOverride() {
    3.     TreeViewItemEx tvi = new TreeViewItemEx();
    4.     Binding expandedBinding = new Binding("IsExpanded");
    5.     expandedBinding.Mode = BindingMode.TwoWay;
    6.     tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);
    7.     return tvi;
    8.   }
    9. }
    10.  
    11. public class TreeViewEx : TreeView {
    12.   protected override DependencyObject GetContainerForItemOverride() {
    13.     TreeViewItemEx tvi = new TreeViewItemEx();
    14.     Binding expandedBinding = new Binding("IsExpanded");
    15.     expandedBinding.Mode = BindingMode.TwoWay;
    16.     tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);
    17.     return tvi;
    18.   }
    19. }
    * This source code was highlighted with Source Code Highlighter.
  2. Подправляем ItemTemplate:
    1. <Grid x:Name="LayoutRoot">
    2.   <Grid.Resources>
    3.     <c:HierarchicalDataTemplate x:Key="treeTemplate" ItemsSource="{Binding Children}">
    4.       <TextBlock Text="{Binding Title}"/>
    5.     </c:HierarchicalDataTemplate>
    6.   </Grid.Resources>
    7.   <l:TreeViewEx
    8.     BorderThickness="0"
    9.     ItemTemplate="{StaticResource treeTemplate}"
    10.     ItemsSource="{Binding}"/>
    11. </Grid>
    * This source code was highlighted with Source Code Highlighter.
  3. Прикручиваем в модели загрузку по-требованию.

Вуаля!

Get Microsoft Silverlight

Исходный код.

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

Комментарии

Оставить комментарий
Подписаться на комментарии


Последние статьи

Opml.xml

Rss

About

MeМеня зовут Денис Ларионов.
Работаю программистом. Мне есть что рассказать про: web-бизнес, маркетинг, программирование.

RSS

RSS Add to Google Reader or Homepage

Я - Слушаю подкаст Radio-T