如何克隆一个对象?

How to clone an object?

WPF 应用.Net 6.0 Visual Studio

CategoryList_Copy.Items.Clear()
Dim newNode As ItemCollection = CType(CategoryList.Items.Clone(), ItemCollection)

CategoryList_Copy.Items.Add(newNode)

我怎样才能完成这项工作?我正在尝试将一个项目从一个 TreeView 复制到另一个 TreeView。

我为此使用了一个名为 AnyClone 的 NuGet 包,但我认为我做错了什么。

我收到这个错误:

System.MissingMethodException: 'Constructor on type 'System.Windows.Controls.ItemCollection' not found.'

我做错了什么?

首先,错误很容易解释:ItemCollection 没有带 0 个参数的 public 构造函数。 AnyClone 显然必须实例化它想要克隆的项目,ItemCollection 不支持,至少在没有提供参数的情况下不支持。

不过这应该无关紧要,您只是使用了错误的方法来复制数据。

ItemCollection 是一个视图,根据提供的数据绑定,它用作数据和 TreeView 之间的层,因此您可以应用 sorting/filtering/grouping 而无需更改数据。如果要将数据从一个 TreeView 复制到另一个,请不要复制 ItemCollection 中的数据,而是复制 ItemsSource 中的数据。

此外,您正在尝试复制所有项目,而不仅仅是您要复制的项目。即使您解决了上述错误:您尝试复制一个 TreeView 的完整视图,然后将它作为一个项目添加到另一个 TreeView,这不是您想要实现的。

更简洁的方法如下:

TreeView 应该有一个 ItemsSource:将此 ItemsSource 绑定到您希望 TreeView 显示的数据。确保 CategoryList_Copy 有一个单独的集合绑定到它的 ItemsSource。复制数据时,只需将一个 CategoryList 的 ItemsSource 的值复制到另一个。在那里你应该可以很容易地使用 AnyClone 的克隆方法。