c#对象修改:一种奇怪的行为

Fra*_*oDS 6 c# wpf object

我正在开发一个WPF C#应用程序,我在修改对象时有一个奇怪的行为.我试着以一般方式解释它.假设您有一个类的对象,如下所示:

public class A
{
  int one;
  bool two;
  List<B> listofBObjects;
}
Run Code Online (Sandbox Code Playgroud)

其中B是:

public class B
{
  int three;
  int four;
}
Run Code Online (Sandbox Code Playgroud)

我将一个A类的实例和一个B类的实例从一个窗口传递到另一个窗口,只在第二个窗口中定义了两个类型为A和B的变量,并在Show()方法之前传递它们,并使用以下代码执行窗口的实例FirstWindow:

SecondWindow newWindow = new SecondWindow();
newWindow.instanceOfA = this.instanceOfA; //instanceOfA is of type A
newWindow.instanceOfB = this.instanceOfA.listOfBObjects[0]; //instanceOfB is of type B
newWindow.Show();
Run Code Online (Sandbox Code Playgroud)

如果我必须重复两次这个代码(也就是说,打开两次窗口),在第一次执行时一切都按预期工作,实际上如果我修改instanceOfB变量中的值,我也会在instanceOfA变量中看到修改.但是,在第二次执行中,修改instanceOfB不会影响instanceOfA......修改是在newWindow.例如:

this.instanceOfB.three++;
this.instanceOfB.four--;
Run Code Online (Sandbox Code Playgroud)

想象一下你在FirstWindow.单击一个按钮,打开SecondWindow,如上所述传递两个变量.在SecondWindow中,做一些修改,单击OK并关闭SecondWindow,将控制权返回给FirstWindow.如果我按下相同的按钮,我会重新打开SecondWindow.如果我现在进行修改,它们不会影响这两个变量.

我尝试在控制台中使用控制表达式查看控制台中的两个变量(在VS2012中),我看到,在代码的第一次传递中,当执行上面的代码时,两个变量都会发生变化,但在第二次代码传递中,只会instanceOfB发生变化...

编辑:按照我用来将参数传递给SecondWindow的代码...类型在下面解释

 IntermediatePosition obj = ((FrameworkElement)sender).DataContext as IntermediatePosition; //IntermediatePosition is Class B
        IntermediatePositionsSettingsWindow ips = new IntermediatePositionsSettingsWindow();
        ips.currentIntermediatePosition = obj;//this is the instanceOfB
        ips.idxOfIpToModify = obj.index;
        ips.currentSingleProperty = this.currentPropertyToShow; //this is the instanceOfA object
        ips.sideIndex = this.sideIndex;
        ips.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

考虑obj通过将按钮选择到数据网格中来给出,其中每行代表一个IntermediatePosition对象.在数据网格中,有一个列按钮,并按下按钮,IntermediatePositionsSettingsWindow打开正确的数据

编辑:我已经完成了以下检查:

this.currentPropertyToShow.sides[this.sideIndex].intermediatePositionList[i].Ge??tHashCode() == obj.GetHashCode()
Run Code Online (Sandbox Code Playgroud)

其中i是相关IntermediatePosition对象的索引.首先使用IntermediatePositionsSettingsWindow对象结果等于,但在第二次使用时它们是不同的

为什么会发生这件事?如果需要任何其他澄清,我将编辑问题谢谢

Pau*_*els 1

很难对此给出正确的答案,因为没有足够的代码来正确解决该问题。但是,如果您要进行数据绑定,那么我相信您需要实现此接口。您的问题可能只是您的模型没有反映屏幕上的更改。