Silverlight 通过IsExpanded属性在树视图中的父节点展开时加载子节点
我知道已经有一些关于这个的讨论,但我还没能解决我的问题 至于按需加载项目,它已经可以正常工作了。我已经对TreeViewItem进行了子类化,每当触发“Expanded”事件时,我的TreeViewItemSource就会获取接下来的几个节点 但这是一个复杂但混乱的过程,因为我有自定义的TreeView项,而且因为我通过TreeView.items.add添加了项,所以我无法在XAML中定义节点的表示形式 这有点不合情理,因为我想在每个节点上显示一个图标,而将其放入代码中至少有点违反规则 所以我的问题归结为:如果没有Bea Stollnitz的技巧,绑定到IsExpanded属性难道不可能吗 这就是我认为它会起作用的方式,但事实并非如此:Silverlight 通过IsExpanded属性在树视图中的父节点展开时加载子节点,silverlight,xaml,Silverlight,Xaml,我知道已经有一些关于这个的讨论,但我还没能解决我的问题 至于按需加载项目,它已经可以正常工作了。我已经对TreeViewItem进行了子类化,每当触发“Expanded”事件时,我的TreeViewItemSource就会获取接下来的几个节点 但这是一个复杂但混乱的过程,因为我有自定义的TreeView项,而且因为我通过TreeView.items.add添加了项,所以我无法在XAML中定义节点的表示形式 这有点不合情理,因为我想在每个节点上显示一个图标,而将其放入代码中至少有点违反规则 所以我
<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
}
}
我怎样才能赶上扩大的活动?你能不能慷慨一点,给我一个小片段或者多解释一下?