我正在开发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].GetHashCode() == obj.GetHashCode()
i
相关IntermediatePosition
对象的索引在哪里。第一次使用IntermediatePositionsSettingsWindow
对象的结果等于,但是在第二次使用时,它们是不同的
为什么这件事发生?如果需要其他说明,我将编辑问题谢谢
由于没有足够的代码来正确解决此问题,因此很难给出正确的答案。但是,如果您要进行数据绑定,那么我认为您需要实现此接口。您可能遇到的问题仅仅是您的模型未反映屏幕更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句