Загрузка по-требованию дочерних элементов TreeViewItem в Silvierlight 14/10/09
Отчего-то в Silverlight не работает байндинг к свойству "IsExpanded" у элемента TreeViewItem (в WPF с этим все в порядке) в результате сделать загрузку дочерних узлов по-требованию можно только ручками подключив байндинг. Решение подсмотрел в посте Bea Stollnitz: How can I expand items in a TreeView? – Part II. Итак:
- Наследуем классы TreeView и TreeViewItem и ручками подключаем байндинг.
- 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;
- }
- }
- Подправляем ItemTemplate:
- <Grid x:Name="LayoutRoot">
- <Grid.Resources>
- <c:HierarchicalDataTemplate x:Key="treeTemplate" ItemsSource="{Binding Children}">
- <TextBlock Text="{Binding Title}"/>
- </c:HierarchicalDataTemplate>
- </Grid.Resources>
- <l:TreeViewEx
- BorderThickness="0"
- ItemTemplate="{StaticResource treeTemplate}"
- ItemsSource="{Binding}"/>
- </Grid>
- Прикручиваем в модели загрузку по-требованию.
Вуаля!