You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF .NET 6.0克隆TreeView项报MissingMethodException如何解决

WPF .NET 6.0 TreeView项跨控件复制解决方案

错误原因

你遇到的System.MissingMethodException报错有两个核心问题:

  1. System.Windows.Controls.ItemCollection 没有公共无参构造函数,它的实例只能由TreeView等ItemsControl控件内部创建,通用克隆工具无法绕过这个限制直接实例化该类
  2. 你的原有逻辑即使克隆成功,把整个ItemCollection作为单个项Add到目标TreeView,也只会把集合当成一个独立节点展示,无法实现所有项的层级复制

正确实现方式

不要直接克隆ItemCollection,改为递归复制每个TreeViewItem的属性和子节点即可:

1. 新增递归复制方法

Private Function CloneTreeViewItem(sourceItem As TreeViewItem) As TreeViewItem
    Dim clonedItem As New TreeViewItem()
    ' 复制需要的属性,可根据需求扩展
    clonedItem.Header = sourceItem.Header
    clonedItem.Tag = sourceItem.Tag
    clonedItem.IsExpanded = sourceItem.IsExpanded

    ' 递归复制所有子节点
    For Each child In sourceItem.Items
        If TypeOf child Is TreeViewItem Then
            clonedItem.Items.Add(CloneTreeViewItem(CType(child, TreeViewItem)))
        Else
            ' 若子项为绑定的数据对象,可按需做深拷贝后添加
            clonedItem.Items.Add(child)
        End If
    Next
    Return clonedItem
End Function

2. 替换原有调用代码

CategoryList_Copy.Items.Clear()
' 遍历原TreeView所有根节点逐一复制
For Each rootItem In CategoryList.Items
    If TypeOf rootItem Is TreeViewItem Then
        CategoryList_Copy.Items.Add(CloneTreeViewItem(CType(rootItem, TreeViewItem)))
    Else
        CategoryList_Copy.Items.Add(rootItem)
    End If
Next

补充说明

如果你的TreeView采用MVVM模式绑定了数据源,更简单的方案是直接深拷贝原数据源集合,赋值给目标TreeView的ItemsSource即可,不需要操作控件层面的ItemCollection。

内容的提问来源于stack exchange,提问作者Avrigeanu Laurian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:06:03