データグリッドに接続されたコレクションItemDemandCollection
があります。ユーザーが同じデータを入力すると、警告メッセージにデータの複製が表示される必要があります。ObservableCollectionにデータが重複しているかどうかを確認するにはどうすればよいですか?
どうすれば対応できますか?
データグリッドに接続されたコレクションItemDemandCollection
があります。ユーザーが同じデータを入力すると、警告メッセージにデータの複製が表示される必要があります。ObservableCollectionにデータが重複しているかどうかを確認するにはどうすればよいですか?
どうすれば対応できますか?
入力したデータにICollection.Contains(T)を使用してみてください。 詳細については、Collection.Contains Method
あなたはどのデータをデータグリッドに入力していますか?あなたの各アイテムはどのタイプですか?
など。 Employee
クラスのインスタンスのコレクションをバインドし、Employee IDとNameをデータグリッドの列として表示している可能性があります。
この場合、重複はEmployeeName
プロパティまたはEmployeeID
プロパティで発生する可能性があります。しかし、EmployeeName
の複製は、任意の2人の従業員が同じName
を持つことができるように許可することができます。しかし、同じIDは許可されません。
IDを入力してフォーカスを失うと、アイテムが追加され、ObservableCollection.CollectionChanged
イベントが発生します。 ....このイベントを処理しますので、既存の項目にラムダクエリを実行し、入力された値のためID
プロパティにチェックすると、「e.Actionは==追加」場合、ハンドラに、次のことが確認でき
if (e.Action == NotifyCollectionChangedAction.Add
&& MyItems.Where(
item => item.EmployeeID == e.NewItems[0].EmployeeID).Count() > 1)
{
//Duplicates found!
}
これがあなたを助けていない場合は、あなたの要件を満たすようにしてください。
WinRTでこれと同様のことをしようとしていましたが、これは私のために働いていました。私はWPFでもそうだと思います。 WPFと似ていますが、答えは多かれ少なかれです。これは、あなたが持っている各データ項目には一意のID(または一意の値)があり、(コレクション内に追加しようとしている)すべての項目に同じ一意のIDフィールドがあることを前提としています。
var duplicates = yourCollectionOfItems.Where((item) => item.UniqueID == itemYouAreAboutToAddToCollection.UniqueID);
if (duplicates.Any()) throw new SomeDuplicateException();
// And/or show your alert dialog, in this case.
は、 "IF(duplicates.Any())" "(duplicates.Count()> 0)であれば" と同じです。
"duplicates"変数を使用せずに1つの行にチェーンすることもできます。例えば
if (yourCollectionOfItems.Any((item) => item.UniqueID == itemYouAreAboutToAddToCollection.UniqueID))
{
// Do error handling here.
}