2

ここで少し裏話を。(typeof(ObservableCollection<Area>))ツリービューをバインドするパブリック プロパティがあります。ツリーを更新したいのですが、全体を再描画して、選択したアイテム、ノードの折りたたまれた/展開された状態、および実装を忘れたその他のものを失いたくありません。そのため、コレクション内の Area を更新する必要があると思います。FirstOrDefault ステートメントを使用して何かに等しく設定しても、実際には監視可能なコレクションの Area が変更されないことに気付きました。

var areas = GetAreaInfo(); //Entity Framework query returns ObservableCollection<Area>
foreach (Area a in areas)
{
    var αrea = Areas.FirstOrDefault(α => α.Id == a.Id);
    if (αrea != null)
        αrea = a;  //αrea changes, but Area[0] which is supposed to be αrea doesn't
}

オブザーバブル コレクションを反復処理してインデックスを使用する必要がないように、オブジェクトへの参照またはポインターを取得できますか?

4

1 に答える 1

4

自分が思っていることを実際にやっているわけではありません。あなたの場合、面積は単なる変数です。area = a を設定すると、「area」変数が指している場所がリセットされ、監視可能なコレクションはまったく変更されません。

最善の策は、area のすべてのプロパティを a のプロパティと一致するように更新することです。通常、オブジェクトの 1 つのインスタンスから別のインスタンスにプロパティをコピーする Clone メソッドまたは Copy メソッドを作成するのは簡単です。もう 1 つのオプションは、コレクションから area を削除して代わりに a を追加することですが、順序付けに問題が発生する可能性があります。

編集:実際の質問では、はい、 C# でポインターを取得することは可能ですが、それは悪い考えです。作成にはさらに多くの作業が必要になり、コードを安全でないとマークする必要があり、今後の維持がより困難になります。

于 2012-07-23T13:32:10.983 に答える