2009-09-09 53 views
0

我有一个Silverlight TreeView控件,当点击特定节点时,它将动态填充。例如,我加载第一代(级别)节点,然后当用户点击其中一个节点时,我使用Selected事件来填充该节点的子节点等等。我从数据库中发回一个bool值与每个节点值一起表示新节点是否有子节点。以编程方式在Silverlight TreeView上显示展开箭头

我想设置展开箭头显示在有新生节点的新节点前面,但问题在于它的子节点还没有填充。我想也许将HasChild设置为我的布尔值,但HasChild是只读的。任何建议将非常感激。

回答

1

只需添加空白树视图时,它将合拢以显示箭头。

但是,当用户扩大,清除空白的孩子,并进行异步调用,以获得真正的孩子。

在进行GetChildrenAsync调用时,将UserState设置为父树视图或id。

当他们到达时,UserState应该是父树treeviewitem或id,当你发现你刚刚设置它的父项,它的itemsource到e.Result。

+0

我想到了这个空白的孩子,并尝试过之前。它对大多数人来说都很好,但是随后一些数据表明具有特定名称的特定节点(即4555667)已经存在,我得到了这个奇怪的错误。我运行了我的调试器并三重检查了我的数据,但是我看不到它会被复制到哪里。 – 2009-09-10 15:06:21

+0

这太糟糕了,我的工作真的很好。您是否确定在再次添加之前清除现有的孩子?你能说出哪些方法或组件是错误的根源吗? – Paully 2009-09-11 15:38:23

+0

我有两个填充节点的函数:一个是做初始填充,一个是做所有子序列的子节点。我的第一个功能将完美填充。在一个例子中,我有10个记录,其中4个有孩子(空白的孩子)。当我运行填充子元素函数时,如果一个节点包含多个具有子节点的子节点,它会给我一个未处理的错误,说明一个节点已经以该名称存在(我将所有具有节点ID的节点命名为I已经证实没有数据冗余。)您想查看我的代码吗? – 2009-09-20 15:25:41

0

如果您熟悉依赖项属性,您可以创建一个依赖属性,该属性可由您在代码中设置,并且可以在xaml中设置为可以绑定。

这将允许您使用ValueConverter来呈现箭头的可见性。

+0

我试图用你的建议的方法,但我得到了以下错误:

在Silverlight应用程序处理错误无法设置只读属性HasItems。在System.Windows.Controls.TreeViewItem.OnHasItemsPropertyChanged(等等,等等,等等..)

这里是我曾经尝试更新我的树型视图的依赖项属性代码:

树型视图TVI =新树型视图(){Header = x.UserName,Name = x.UserName}; tvi.SetValue(TreeViewItem.HasItemsProperty,true);

我可能错过了一些东西。谢谢! – 2009-09-10 15:03:51

+0

我觉得HasItems只是一个反映物品的数量是否大于0.所以你不会直接设置它,而是确保它有项目:) – 2009-09-10 17:39:20

+0

我需要伪装它,以便它认为它有项目而实际上并没有在当时填充物品。 – 2009-09-20 15:21:26