我有一个绑定到某个可观察集合的视图(由一个列表视图组成)。换句话说,我有:
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
因此,在我看来,我有一个对 someCollection 类型的引用,ObservableCollection<object>
因为如果它的实际类型在哪里,我会得到一个编译错误,ObservableCollection<ClassFoo>
因为我必须添加对 Project2.dll 的引用。
出于某种原因,我无法添加该引用,并且我的老板希望我创建命令等...
最后一部分只是解释了我为什么要这样做,但总之我正在寻找:
ObservableCollection<object> myUnknownObservableCollection = someReference;
// I know that someReferce is of type ObservableCollection<ClassFoo>
var x = myUnknownObservableCollection.GetType().GetTypeOfItems.....
最后我希望 x 等于typeof(ClassFoo)
我如何通过反射来做到这一点,因为 someReference 是类型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!!!
能够在没有动态数据类型的情况下做到这一点会很好