C# 如何在分配克隆后检查模型是否更改

C# 如何在分配克隆后检查模型是否更改,c#,wpf,mvvm,C#,Wpf,Mvvm,我的模型类继承自BaseModel类。我将模型克隆发送到dialogbox,在此之前我捕获了该模型的所有属性。然后,我打开“编辑数据”对话框。若单击“保存”,则按模型克隆覆盖模型,否则单击“关闭并关闭对话框”。在这之后,我可以将数据发送到db,但在我检查从一开始捕获数据的基本模型到方法是否有变化之前。 问题是,当我将克隆模型分配给原始模型时,OnPropertyChange方法不会调用,例如:如果模型克隆具有集合属性,并且我在集合中更改了某些内容,我将在对话框中调用CholSelectChang

我的模型类继承自BaseModel类。我将模型克隆发送到dialogbox,在此之前我捕获了该模型的所有属性。然后,我打开“编辑数据”对话框。若单击“保存”,则按模型克隆覆盖模型,否则单击“关闭并关闭对话框”。在这之后,我可以将数据发送到db,但在我检查从一开始捕获数据的基本模型到方法是否有变化之前。 问题是,当我将克隆模型分配给原始模型时,OnPropertyChange方法不会调用,例如:如果模型克隆具有集合属性,并且我在集合中更改了某些内容,我将在对话框中调用CholSelectChange方法,isDataChange方法可以在此处返回true。当我将克隆分配给原始模型时,IsDataChange方法返回false。我理解这一点,但如何解决这个问题?有人能理解我吗?:)


也许,我不该做克隆人?我使用ObservaleCollection来跟踪变化。我不知道如何实施它。我调用了cholection更改事件,下一步是什么

最简单的方法是使用Json.Net创建模型的Json对象,然后再次创建Json对象,并比较字符串


请记住,这不是一种有效的方法,但对于您的场景来说,CPU使用应该不是问题。

最简单的方法是使用Json.Net创建模型的Json对象,然后再次创建Json对象,并比较字符串


请记住,这不是一种有效的方法,但在您的场景中,CPU使用率应该不是问题。

您可以设置每个属性,而不是设置整个模型。至少对于非列表属性

比如:

original.Property1 = clone.Property1;
original.Property2 = clone.Property2;
而不是:

original = clone;

可以设置每个属性,而不是设置整个模型。至少对于非列表属性

比如:

original.Property1 = clone.Property1;
original.Property2 = clone.Property2;
而不是:

original = clone;

请精确:model或viewmodel(因为您将其绑定到视图)?我有带模型和上下文的主视图(viewmodel),我用模型中的一些属性从中调用对话框(UserControle)。请精确:model或viewmodel(因为您将其绑定到视图)?我有带模型和上下文的主视图(viewmodel),我调用对话框(用户控制)如果OP没有一个接一个地复制,克隆能那么聪明吗?其他引用类型呢?你是对的@LeiYang我使用克隆方法克隆我需要的所有东西、集合、引用类型等。如果OP没有一个接一个地复制,克隆能那么聪明吗?其他引用类型呢引用类型?你说得对@LeiYang我使用克隆方法克隆我需要的所有东西,集合,引用类型等等。