2016-12-20 12 views
1

2つのObservableCollectionがあります.1つは現在の従業員リストを持ち、もう1つは従業員リストを含んでいます。新しいリストに古いリストにない従業員が含まれている場合は、古いリストに追加したいと思います。ObservableCollectionsの2つのアイテムの比較

新しいリストに古いリストの従業員が含まれていない場合は、それを古いリストから削除します。 (私は意味があることを望む)。

ここに私が試したことがあります。

foreach (var employee in _currentUsers.ToList()) 
{ 
    if (!newUsers.Contains(employee)) 
    { 
     Dispatcher.Invoke(() => 
     { 
      _currentUsers.Remove(employee); 
      CurrentUsageDataGrid.Items.Refresh();      
     }); 
    } 
} 

foreach (var employee in newUsers) 
{ 
    if (!_currentUsers.Contains(employee)) 
    { 
     Dispatcher.Invoke(() => 
     { 
      _currentUsers.Add(employee); 
      CurrentUsageDataGrid.Items.Refresh(); 
     }); 
    } 
} 

これは、私はリストがDispatcher.Invoke()はまだ発射され変更されていないことを知っている場合でも、として機能していません。 Containsがどのように動作しているのかと誤解していますか?このようなチェックを行う「より良い」方法がありますか?

答えて

1

従業員クラスはIEquatable<T>インターフェイスを実装していますが、ObservableCollectionのメソッドを含むメソッドは、そのインターフェイスでEqualを使用してオブジェクトを比較します。あなたの代わりにMSDN上Contains

以上の基準を使用して、既存の従業員のためにチェックするためにLINQを使用する必要がありそうでない場合は、https://msdn.microsoft.com/en-us/library/ms132407(v=vs.100).aspx

1

としては、もし前述した は、比較のために均等メソッドをオーバーライド/実装する必要があります。 2つのクラスオブジェクトの "Contains"チェックを実行すると、2つのオブジェクトが等しいかどうか(プロパティが一致していない場合)チェックされます。 idを使ってequalを実行するか、ハッシュ値を計算して比較することができます。

関連する問題