投稿で答えを使用しようとしています: EntitySet<T>を並べ替えてインターフェイスを公開し、バインディング リストで EntitySet を並べ替えるにはどうすればよいですか。以下のクラスを作成しましたが、次のコンパイラ エラーが発生しました。以下のメソッドをコンパイルするためにインクルードする必要がありますか? 私はデリゲートとラムバ式に非常に慣れていません。
また、EntitySet から BindingList を作成すると、BindingList に加えた変更が EntitySet にも適用されることを誰かが確認できますか?
基本的に、並べ替えて変更する必要がある EntitySet があります。次に、BindingList の元となった元のエンティティを使用して、これらの変更を永続化する必要があります。
public class EntitySetBindingWrapper<T> : BindingList<T>
{
public EntitySetBindingWrapper(BindingList<T> root)
: base(root)
{
}
public void Sort<P>(Expression<Func<T, P>> expr, ListSortDirection direction)
{
if (expr == null)
base.RemoveSortCore();
MemberExpression propExpr = expr as MemberExpression;
if (propExpr == null) throw new ArgumentException("You must provide a property", "expr");
PropertyDescriptorCollection descriptorCol = TypeDescriptor.GetProperties(typeof(T));
IEnumerable<PropertyDescriptor> descriptors = descriptorCol.Cast<PropertyDescriptor>();
PropertyDescriptor descriptor = descriptors.First(pd => pd.Name == propExpr.Member.Name);
base.ApplySortCore(descriptor, direction);
}
}
ようやく上記のコードをコンパイルできるようになりましたが、コンストラクターを呼び出そうとするとエラーが発生します。
currentPredefinedJob.fkItems が EntitySet である次のコードは、エラーになります: System.ComponentModel.IBindingList から System.ComponentModel.BindingList に変換できません。
var bindingWrapper = new EntitySetBindingWrapper<PredefinedJobsItem>(currentPredefinedJob.fkItems.GetNewBindingList());
また、次のコードはエラーになります: エラー 8 汎用型 'MarineService.Tests.EntitySetBindingWrapper' を使用するには、'1' 型引数が必要です
var bindingWrapper = new EntitySetBindingWrapper(currentPredefinedJob.fkItems.GetNewBindingList());
このコンストラクターを呼び出す方法と、結果の BindingList をどのように並べ替えるかを確認する方法を教えてもらえますか?