2011-08-08 5 views
0

次のシナリオを示します。オブジェクトを含むリストにバインドしたDataGridがあります。各オブジェクトは、さまざまなデータ(名前、顧客、サーバー名など)を持つ行を表します。次に、同一のオブジェクトまたは行(名前、顧客、サーバー名など)が同一である可能性があるとします。オーバーライドされたIsEqualメソッドを使用してリストにバインドすると、DataGridのIDの問題が発生する可能性があります。

私はデータグリッドのすべてにリストを結合し正常に動作し、私は私のカーソルでグリッドを移動することができます。しかし、UnitTestを作成するために、問題のオブジェクトのEqualsメソッドをオーバーライドしました。このように:

public override bool Equals(object obj2) 
{ 
    ConnectionDestination compareObject = obj2 as ConnectionDestination; 
    if (compareObject == null) 
    { 
     return false; 
    } 


    if ((this.Kunde != compareObject.Kunde) || this.Filiale != compareObject.Filiale || this.Bez != compareObject.Bez || 
      this.Username != compareObject.Username || this.Password != compareObject.Password) 
    { 
     return false; 
    } 
} 

    public override int GetHashCode() 
    { 
     return this.Kunde.GetHashCode()^this.Bez.GetHashCode()^this.Filiale.GetHashCode()^this.Servername.GetHashCode()^this.Username.GetHashCode()^this.Password.GetHashCode(); 
    } 

今の問題は、私は2つの全く同じ行を持っているとequalsメソッドが呼び出されると、データグリッドが混乱してしまうことで、複数の行を選択したか、私は、グリッド内を移動することはさらに混沌となります。

したがって、質問:このような問題が発生しないように、適切な等価比較を行う方法はありますか?

答えて

0

動作は正しく、すべてのWPFリストがどのように選択ロジックを実装しているかというロジックに従います。回避策を見ている唯一の方法は、アイテムをアイテムソースで使用する前にラップすることです。
MVVMパターンを使用すると、行ごとにViewModelが作成されます。データグリッド用の追記として

:またGetHashCodeメソッド(すなわち十分注意) - メソッド等しいオブジェクトに対して同じ値を返します。それ以外の場合、選択にも問題があります。あなたの例では、GetHashCode()をオーバーライドしても表示されません。 Equals()をオーバーライドする場合、GetHashCode()をオーバーライドすることが必須であるため、これは実際の問題ではありません。

+0

ヒントのおかげで、HCL!私はもう少し詳しく試してみましょう... GetHashCodeメソッドをオーバーライドする方法は次のとおりです。これもやっていますが、投稿に追加するのを忘れてしまいました。今終わった! – Artimidor

関連する問題