0

私は問題があります。コンテンツと同じオブジェクトを持つ 2 つの監視可能なコレクションがあります。

observablecollection を使用して、データグリッドから 1 つのオブジェクトを grep します。

datagrid.selecteditem as object

2番目の監視可能なコレクションから削除したい。行ステートメントは次のようになります

obscollection.remove(datagrid.selecteditem as object);

オブジェクトは完全に同じですが、obscollection をカウントすると、オブジェクトは削除されません...

どうすればこれを解決できますか? 同じ内容の 2 つのコレクションが必要な理由について質問しないでください ;)

4

1 に答える 1

0

「オブジェクトは完全に同じです」とは、それらが同等であることを意味しますか、それとも同じインスタンスであることを意味しますか? 私の推測では、それらは同等ですが、実際には同じオブジェクト インスタンスではありません。ObservableCollection の .remove() メソッドは参照の等価性を探します。したがって、同じオブジェクト インスタンスでない場合、探しているオブジェクトが見つかりません (したがって、削除されません)。

オブジェクトの等価性に関する情報を確認することをお勧めします。この記事は、この回答と同様にそれについて語っています(検索を行うと、さらに多くの情報があります)。

2 つのコレクションが同等のオブジェクトを持っているが、同じインスタンスを参照していない場合、多くの簡単な解決策があります。1 つの方法は、IComparable インターフェイスを実装するか、LINQ などを使用して 2 番目のコレクションで同等のオブジェクトを見つけ、手動で削除することです。

お役に立てれば。

于 2012-07-20T05:04:15.013 に答える