リフレクション (methodDefinition.Invoke(..)) によって itemsSource を満たすデータグリッドを使用しています。ターゲット メソッドは IQueryable< T > を返しますが、T は実行時に既知の EntityType です。
戻り値の型は IQueryable< T > であるため、これを行うと IQueryable< T > は IEnumerable を実装します。
dataGrid1.ItemsSource = methodQuery.Invoke(instance, parameters) as IEnumerable<object>;
行と列を表示できます (さらに、AutoGeneratingColumns イベントがスローされるため、列を管理できます)が、ヘッダーをクリックして行を並べ替えることができません。
それから私はこれをやろうとしました:
dataGrid1.ItemsSource = methodQuery.Invoke(instance, parameters) as List<object>;
しかし、予想通り、ジェネリック型を「Model.Tab_001」から「object」に直接キャストできないという例外がスローされます。
また、実行時に結果を List< T > に変換しようとしました (IEnumerable.ToList() の拡張により、ソースを List< T > に変換する関数を実装するデリゲートを作成します)。ランタイムとオブジェクト (methodDefinition.invoke から返される) は、このメソッドを使用する前に型 T を明示的に宣言しないと、拡張子 .ToList() を使用できません。
@edit: このメソッドを同じ IEnumerable< object > (datagrid で動作する) および ToList() 拡張メソッドで使用すると、datagrid が空白行でいっぱいになり、AutoGeneratingColumns が起動されません。したがって、空白行でいっぱいの dataGrid だけで、結果を見ることができません。
また、結果を ObservableCollection に変換しようとしたところ、リストで同じ問題が発生しました。
リストをデータグリッドのItemsSoureとして使用する以外に、列ヘッダーをクリックしてデータグリッドの行をソートする別の方法はありますか?