私は WPF C# アプリケーションを開発していますが、オブジェクトの変更で奇妙な動作をします。私はそれを一般的な方法で説明しようとします。次のように記述されたクラスのオブジェクトがあるとします。
public class A
{
int one;
bool two;
List<B> listofBObjects;
}
ここで、B は次のとおりです。
public class B
{
int three;
int four;
}
A クラスのインスタンスと B クラスのインスタンスをウィンドウから別のウィンドウに渡します。2 番目のウィンドウで型 A と B の 2 つの変数のみを定義し、それらを 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();
このコードを 2 回繰り返す (つまり、ウィンドウを 2 回開く) 必要がある場合、最初の実行ではすべてが期待どおりに機能します。実際、instanceOfB
変数の値を変更すると、変数にも変更が表示されinstanceOfA
ます。しかし、2 回目の実行では、 の変更instanceOfB
は影響しませんinstanceOfA
。変更は で行われnewWindow
ます。例えば:
this.instanceOfB.three++;
this.instanceOfB.four--;
FirstWindow にいると想像してください。ボタンをクリックすると、SecondWindow が開き、上記のように両方の変数が渡されます。SecondWindow でいくつかの変更を行い、[OK] をクリックして SecondWindow を閉じ、制御を FirstWindow に戻します。同じボタンをもう一度クリックすると、SecondWindow が再び開きます。ここで変更を行っても、両方の変数には影響しません。
コンソールの両方の変数を(VS2012で)制御式で調べようとしましたが、コードの最初のパスでは、上記のコードが実行されると両方の変数が変更されますが、コードの2番目のパスでは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
は同等の結果が得られますが、2 回目の使用では異なります
なぜこのようなことが起こるのですか?他の説明が必要な場合は、質問を編集します ありがとう