将子节点添加到treeview wpf中的父



我正在开始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_9677cfc546ffef17bf70aee61b6c8974a09496496441ff7fe641ff7fe64c69c69c69c77f6b0fe288' 要键入'system.windows.controls.treeviewitem'。

treeview中的项目属性包含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");
     }
}

edit :如果您在窗口构造器中调用它,则containerFromitem方法将返回null,因为窗口尚未加载。尝试以下内容:

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

最新更新