いくつかの観察可能なコレクションにバインドされたビュー(リストビューで構成されています)があります。言い換えれば、私は持っています:
var someCollection = new ObservableCollection<ClassFoo>();
// initialize someCollection
ListView someView = new ListView();
someView.DataContext = someCollection;
someView.ItemsSource = someCollection;
ノート:
someView
Project1.dllとProject2.dllsomeCollection
にあります- Project2.dllにはProject1.dllへの参照があり、Project1.dllにはProject2.dllへの参照がありません
したがって、私の見解では、Project2.dllへの参照を追加する必要があるためObservableCollection<object>
、実際のタイプの場所にコンパイルエラーが発生するため、タイプのsomeCollectionへの参照があります。ObservableCollection<ClassFoo>
なんらかの理由でその参照を追加できず、上司からコマンドなどを作成してほしいとのことです。
最後の部分は、なぜ私がこれをやりたいのかを説明しているだけですが、要するに私は探しています:
ObservableCollection<object> myUnknownObservableCollection = someReference;
// I know that someReferce is of type ObservableCollection<ClassFoo>
var x = myUnknownObservableCollection.GetType().GetTypeOfItems.....
typeof(ClassFoo)
最後に、someReferenceがタイプである場合、xをリフレクションでどのように実行できるかと等しくしたいと思いObservableCollection<ClassFoo>
ます。
編集
私は解決策を得ました!ここにあります:
class Person
{
public string Name { get { return "Antonio"; } }
}
..
// view code:
IEnumerable<object> uncknownObject;
// view model does this:
uncknownObject = new ObservableCollection<Person>( );
// continuation of view code:
var observCol = uncknownObject.GetType( );
var x = ( ( dynamic )observCol ).GenericTypeArguments[ 0 ];
var instance = ( Person )Activator.CreateInstance( x );
Console.WriteLine( instance.Name ); // Print Antonio!!!
ただし、動的データ型がなくても実行できると便利です。