C#对象修改:奇怪的行为

弗朗切斯科DS

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

public class A
{
  int one;
  bool two;
  List<B> listofBObjects;
}

其中B是:

public class B
{
  int three;
  int four;
}

我将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();

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

this.instanceOfB.three++;
this.instanceOfB.four--;

想象您在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();

考虑到这obj是通过选择数据网格中的按钮来给出的,其中每行代表一个IntermediatePosition对象。在数据网格中,有一个列按钮,并通过单击按钮,IntermediatePositionsSettingsWindow使用适当的数据打开

编辑:我已经执行了以下检查:

this.currentPropertyToShow.sides[this.sideIndex].intermediatePositionList[i].Ge‌​tHashCode() == obj.GetHashCode()

i相关IntermediatePosition对象的索引在哪里第一次使用IntermediatePositionsSettingsWindow对象的结果等于,但是在第二次使用时,它们是不同的

为什么这件事发生?如果需要其他说明,我将编辑问题谢谢

保罗·迈克尔斯

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章