在radtreeview silverlight中预选复选框)

时间:2014-05-06 13:29:52

标签: c# silverlight telerik radtreeview nested-checkboxes

我有一个silverlight应用程序,其中有一个带复选框的telerik radtreeview。用户选择内容,当用户想要编辑它时,我需要使用先前保存的选择预先填充树。

我发现我可以将复选框绑定到我的viewmodel。但如果我选择那种情况,我就不会使用"内置"复选框并丢失三态逻辑(选择父级时自动选择兄弟姐妹)

所以我正在尝试从radtreeview.items集合中获取radtreeviewitem对象

http://www.telerik.com/help/silverlight/radtreeview-how-to-iterate-through-treeviewitems.html

问题是radtreeviewitems仅在用户在ui中扩展节点时生成。因此,在控制数据绑定之后,并非所有我想要遍历的项目都存在。

我还没有找到一种强制ui构建所有radtreeviewitems的好方法,所以我可以遍历它们并设置我的预选。我找到了下面的链接,但它似乎只适用于根节点,而不是兄弟姐妹。

WPF: control.ItemContainerGenerator.Status is NotStarted. How do I tell it to start now?

你们是否也会考虑重建“三态”模式"进入你的viewmodel逻辑"脏"?

您如何在radtreeview中预先选择复选框?

2 个答案:

答案 0 :(得分:0)

我就是这样做的:

 public static void CheckAllTreeItemsAuto(RadTreeView tree)
        {
            tree.ItemContainerGenerator.StatusChanged += (s, e) =>
            {
                if ((s as Telerik.Windows.Controls.ItemContainerGenerator).Status == Telerik.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
                {
                    RadTreeViewItem item = (RadTreeViewItem)tree.ItemContainerGenerator.ContainerFromIndex(0);
                    while (item != null)
                    {
                        item.IsChecked = true;
                        item = item.NextItem;
                    }
                }

            };

        }

我没有在开始时没有生成的项目中遇到问题。 (我不知道你如何生成RadTreeView。)

答案 1 :(得分:0)

使用RadTreeView控件时,您需要记住,内置的三态逻辑仅用于声明性定义的控件和项目。这意味着在MVVM方案中使用此功能将无法按预期工作。

由于Telerik了解这一限制,因此他们向社区提供了一篇文章,演示开发人员如何在MVVM场景中使用本机CheckBox控件的三态逻辑。您可以在documentation中找到该文章。此外,在文章的最后,您可以找到一个指向其CodeLibrary的链接,您可以在其中下载准备运行的项目,演示所描述的方法。

我希望这些信息能为您提供帮助。