在TreeView WPF中将子节点添加到父节点?

时间:2017-04-26 16:38:30

标签: c# wpf treeview

我正在开始WPF(这是重要的注意事项)。

我想用一个集合填充树视图,如果集合包含特定项目,我将子节点添加到它(静态):

private void FillControlTree()
{
    var oClsModule = new ClsModules();
    var allModules = oClsModule.GetData().Where(x => x.IsActive == true && x.ModuleCode != 1);
    trvItemGroup.ItemsSource = allModules.ToList();
    foreach (var item in trvItemGroup.Items)
    {
        if (((TbModules)item).ModuleEName.Trim() == "Account")
        {
            ((TreeViewItem)item).Items.Add("Sub Account");
        }
    }
}

在投射到TreeViewItem时抛出投射错误:

  

类型' System.InvalidCastException'的例外情况发生在   XERP.exe但未在用户代码中处理

     

附加信息:无法投射类型的对象   ' System.Data.Entity.DynamicProxies.TbModules_9677CFC546FFEF17BF70AEE61B6C8974A095496441FF7FE64C69C77F6B0FE288'   键入' System.Windows.Controls.TreeViewItem'。

1 个答案:

答案 0 :(得分:1)

TreeView中的Items属性包含TbModules对象的集合。因此,您无法将此对象强制转换为TreeViewItem。试试这个:

foreach (TbModules item in trvItemGroup.Items)
{
     if (item.ModuleEName.Trim() == "Account")
     {
          TreeViewItem treeViewItem = (TreeViewItem)trvItemGroup.ItemContainerGenerator.ContainerFromItem(item);
          treeViewItem.Items.Add("Sub Account");
     }
}

编辑:如果在窗口构造函数中调用它,ContainerFromItem方法将返回null,因为窗口尚未加载。请尝试以下方法:

    public MainWindow()
    {
        InitializeComponent();
        Loaded += MainWindowOnLoaded;
    }

    private void MainWindowOnLoaded(object sender, RoutedEventArgs e)
    {
        Loaded -= MainWindowOnLoaded;
        FillControlTree();
    }