2010-11-26 10 views
1

誰もがListをプラグインできるUserControlをやっています。C#:Generic List Property

内部的にListがソートされ、プログラムで追加されるのは内部ItemaSourceの項目です。プロパティElementsDataSource

public List<T> ElementsDataSource {get;set;} 

List<T>コンパイル/動作していないを使用する必要があり、このユーザーコントロールを使用したい

誰もが、代わりに私がList<object>を使用する必要があります。

しかし、その後、私は内部的にそれらを並べ替えるとなどそれらを再利用する際にジェネリック型に再びElementsDataSource内のオブジェクトをキャストする必要があり...

どのように私は私のユーザーにジェネリックリストのプロパティを提供することができますだけで好き。 NETはそれをやっている?

たぶん、私のユーザーはList<Customer>またはList<Department>などでプラグインです...または私は完全に間違っているとList<Object>を使用する必要がありますか?

+2

明示してください:「作業していない/コンパイルしています」という意味はどうですか? –

答えて

0

.NETは、そのようなプロパティの型としてIEnumerableまたはObjectを使用することに注意してください。次に、リフレクションを使用してデータの処理方法を決定します。

代わりに、呼び出し元に任意の並べ替えやフィルタリングを要求し、用意されたIEnumerableを提供するだけで済みます。

オブジェクトのコレクションを表示できるようにする必要があり、コレクション内でソートする必要があり、コレクションに「自然な」ソート順が必要な場合は、オブジェクトにIComparable<T>インターフェイスを実装する必要があります。あなたはそれを見直して発見することができます。コレクションには、IEnumerable<T>IComparable<T>の両方が実装されている必要があります。これにより、コレクション内のアイテムに「自然な」並べ替えができるようになります。

+0

こんにちはJohn、ユーザーが内部プロセスを気にする必要がないので、ソートはUserControl内で実行する必要がありません。リストをElementsDataSourceにプラグインするだけで、顧客は正しい順序でUserControlに表示されるsortidに関するソートが行われます。 – Elisabeth

+1

ソートは、通常、ユーザーコントロールが表示のためのものであれば、外部プロセスと見なされます。コントロールは、ユーザー入力に基づいて並べ替え順序を変更しない限り、提供されたデータを表示する必要があります(グリッドヘッダーをクリックするなど)。さもなければ、彼らは彼らがするように言われたことをしなければならない。 –

+0

=>そのa must-Featureまたはそのコントロールの一部が、前回追加/保存された「要素」をその順序で表示するために同意しません。これでデータベースから再度読み込みます。 – Elisabeth

1

参照してください:Making a generic property

+0

私のクラスがうまくいかないUserControlの場合:public partial class ElementsView :UserControl =>エラーと私はをxaml ;-)で宣言できません – Elisabeth

1

をあなたがコントロールクラスは、一般的な作りにしたくない場合は、(これはあなたのList<T>ソリューションです)その後、多分あなたは、このコントロールで使用されるすべてのクラスに実装List<ISomeInterface>を使用してみてください?

関連する問題