Silverlight 通过IsExpanded属性在树视图中的父节点展开时加载子节点

Silverlight 通过IsExpanded属性在树视图中的父节点展开时加载子节点,silverlight,xaml,Silverlight,Xaml,我知道已经有一些关于这个的讨论,但我还没能解决我的问题 至于按需加载项目,它已经可以正常工作了。我已经对TreeViewItem进行了子类化,每当触发“Expanded”事件时,我的TreeViewItemSource就会获取接下来的几个节点 但这是一个复杂但混乱的过程,因为我有自定义的TreeView项,而且因为我通过TreeView.items.add添加了项,所以我无法在XAML中定义节点的表示形式 这有点不合情理,因为我想在每个节点上显示一个图标,而将其放入代码中至少有点违反规则 所以我

我知道已经有一些关于这个的讨论,但我还没能解决我的问题

至于按需加载项目,它已经可以正常工作了。我已经对TreeViewItem进行了子类化,每当触发“Expanded”事件时,我的TreeViewItemSource就会获取接下来的几个节点

但这是一个复杂但混乱的过程,因为我有自定义的TreeView项,而且因为我通过TreeView.items.add添加了项,所以我无法在XAML中定义节点的表示形式

这有点不合情理,因为我想在每个节点上显示一个图标,而将其放入代码中至少有点违反规则

所以我的问题归结为:如果没有Bea Stollnitz的技巧,绑定到IsExpanded属性难道不可能吗

这就是我认为它会起作用的方式,但事实并非如此:

  <sdk:TreeView Name="treeView1">
    <Style TargetType="sdk:TreeViewItem">                    
      <Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
    </Style>
    <sdk:TreeView.ItemTemplate>
      <sdk:HierarchicalDataTemplate ItemsSource="{Binding Children}" >
        <TextBlock Text="{Binding Path=Label, Mode=OneWay}" />
      </sdk:HierarchicalDataTemplate>
    </sdk:TreeView.ItemTemplate>
  </sdk:TreeView>
因此,如果我可以绑定到IsExpanded,我可以在父节点展开时获取新节点

我做错了什么?这不是解决这个问题的最好办法吗?有什么新想法吗

需要明确的是:理想的情况是,我可以从一个Web服务中抓取一些POCO,比如标签和图标,并通过XAML进行所有的样式设计。最好我不必把它们放进其他东西中,因为这非常慢,至少在我当前的实现中是如此,大约1000个项目,滚动感觉非常糟糕


提前感谢。

一种方法是编写一个附加的行为,侦听扩展的事件,然后加载数据。这样,您就不会对TreeViewItem进行子类化,仍然可以用XAML编写所有布局,但仍然可以获得所需的动态加载行为

编辑

像这样的东西可能无法编译,但应该会给你一个想法

public class LoadDynamicBehavior : Behavior<TreeViewItem>
{
    protected override void OnAttached()
    {
        AssociatedObject.Expanded += LoadData;
    }

    protected override void OnDetaching()
    {
        AssociatedObject.Expanded -= LoadData;
    }

    private void LoadData(object sender, EventArgs e)
    {
        // Load the correct data here and push it into AssociatedObject
    }
}

我怎样才能赶上扩大的活动?你能不能慷慨一点,给我一个小片段或者多解释一下?