0

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

我发现我可以将复选框绑定到我的视图模型。但是,如果我选择那个场景,我不会使用“内置”复选框并丢失三态逻辑(选择父级时自动选择兄弟姐妹等)

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

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

问题是 radtreeviewitems 仅在用户在 ui 中展开节点时生成。因此,在控件被数据绑定后,并非我想要迭代的所有项目都存在。

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

WPF:control.ItemContainerGenerator.Status 未启动。我如何告诉它现在开始?

你们还会考虑将“三态模式”重建到您的视图模型逻辑“脏”中吗?

您将如何在 radtreeview 中预选复选框项?

4

2 回答 2

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)。

于 2014-05-06T13:50:26.647 回答
0

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

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

我希望这些信息对您有所帮助。

于 2014-05-09T14:22:11.997 回答