如何在 C# 中创建对象的绑定副本?
How to create a binded copy of an object in c#?
我有一个 class Employee 的对象(我们称它为 Alice),我想创建该对象的一个副本(我们称它为 Alice_again),这样如果我更改 Alice , Alice_again 的属性也会改变。基本上是创建一个对象的副本,其属性绑定到原始对象。
编辑
我有两个不同的 Employee ObservableCollection(Employee 是用户控件)并且都包含相同的 Employee 对象,我想显示每个 ObservableCollection 一次。为此我正在使用 ItemsControl 并且我已经将 ItemsControl 的 ItemsSource 绑定到这些 ObservableCollection 并且正如我读到的 link 给定的对象可能只在给定的逻辑树中出现一次,所以我试图创建一个对象的副本,但我不想在有更新时更新两个副本。
您不需要创建副本。
由于 ItemsSource 集合中的元素不应该是视觉对象,因此两个或多个源集合可能包含对相同对象的引用。
因此,两个 ItemsControl 的 ItemTemplate 中的两个不同 UI 元素将合法地绑定到同一数据项对象。
object may only be present in a given logical tree once
逻辑树是 UI 个元素的树。此树中不包含不同类型的元素。
对于源集合中的每个项目,将创建其自己的 ContentPresenter,这将包含在父 ItemsControl 的逻辑树中。
每个 ItemsControl 从 ContentPresenter 创建自己的集合。
因此,不同的 ContentPresenters 将在不同的 ItemsControls 中为相同的源项目创建,这不会产生任何问题。
您甚至可以在同一集合中多次包含同一项目。
并且对于这个元素的每个位置,都会创建它自己的 ContentPresenter。
dataTemplate has buttons whose content is binded to properties of Employee
数据模板实际上是一个用于创建 UI 元素的工厂。
当为每个元素应用模板时,将创建其自己独特的 UI 个元素。
我有一个 class Employee 的对象(我们称它为 Alice),我想创建该对象的一个副本(我们称它为 Alice_again),这样如果我更改 Alice , Alice_again 的属性也会改变。基本上是创建一个对象的副本,其属性绑定到原始对象。
编辑
我有两个不同的 Employee ObservableCollection(Employee 是用户控件)并且都包含相同的 Employee 对象,我想显示每个 ObservableCollection 一次。为此我正在使用 ItemsControl 并且我已经将 ItemsControl 的 ItemsSource 绑定到这些 ObservableCollection 并且正如我读到的 link 给定的对象可能只在给定的逻辑树中出现一次,所以我试图创建一个对象的副本,但我不想在有更新时更新两个副本。
您不需要创建副本。
由于 ItemsSource 集合中的元素不应该是视觉对象,因此两个或多个源集合可能包含对相同对象的引用。
因此,两个 ItemsControl 的 ItemTemplate 中的两个不同 UI 元素将合法地绑定到同一数据项对象。
object may only be present in a given logical tree once
逻辑树是 UI 个元素的树。此树中不包含不同类型的元素。
对于源集合中的每个项目,将创建其自己的 ContentPresenter,这将包含在父 ItemsControl 的逻辑树中。
每个 ItemsControl 从 ContentPresenter 创建自己的集合。
因此,不同的 ContentPresenters 将在不同的 ItemsControls 中为相同的源项目创建,这不会产生任何问题。
您甚至可以在同一集合中多次包含同一项目。
并且对于这个元素的每个位置,都会创建它自己的 ContentPresenter。
dataTemplate has buttons whose content is binded to properties of Employee
数据模板实际上是一个用于创建 UI 元素的工厂。 当为每个元素应用模板时,将创建其自己独特的 UI 个元素。