私が学んだことから、BindingList にキャストすることはできませんが、Linq クエリからの結果を NEW BindingList でラップすることができます。ただし、元のバインド リストにいくつかのイベントが関連付けられており、LINQ 結果セットで同じイベントを維持したいため、これはうまくいきません。
例えば:
「Reports」(IReport 型) というメインの BindingList コレクションがあります。このコレクションは次のようにイベントに登録されています: Reports.AddingNew += OnAddNewXReport;
今、この大きなコレクションをフィルタリングして、一致するアイテムをいくつか抽出したい場合、Linq を使用してこの一致リストを取得しています。このリストを BindingList にするには、次のことを行う必要があります。
var rs = Reports.Where(r => r.ReportType == ReportType.MyType).Select(o => (MyType) o);
return new BindingList<MyType>(rs.ToList());
ご覧のとおり、この新しく作成されたコレクションは、新しいアイテムが追加されているときに起動しません。
これを解決する方法を知っている人はいますか? 元のBindingListから「フィルタリングされた」BindingListへのイベントサブスクリプションを閉じる方法はありますか?
助けてくれてありがとう