获取可观察集合中的项类型



我有一个视图(由列表视图组成),它绑定到一些可观察的集合。换句话说,我有:

var someCollection = new ObservableCollection<ClassFoo>();
// initialize someCollection
ListView someView = new ListView();
someView.DataContext = someCollection;
someView.ItemsSource = someCollection;

注意:

  • someView位于项目 1 上.dll someCollection位于项目 2 上.dll
  • Project 2.dll 引用了
  • Project1.dll而 Project 1.dll 没有对 Project 2 的引用.dll

因此,在我看来,我引用了某些类型为 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) 鉴于某些引用是 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!!!

不过,能够在没有动态数据类型的情况下做到这一点会很好


编辑 2

下面是不使用动态类型运行 .net 4.0 的解决方案

如果您打算使用 mvvm,则动态类型将无助于绑定。您可能必须按照 SLaks 的建议使用接口

public interface IClassFoo
{
   string Name { get; }
}
public class ClassFoo : IClassFoo
{
    public string Name { get { return "Antonio"; } }
}
//Usage 
var someCollection = new ObservableCollection<IClassFoo>();

相关内容

  • 没有找到相关文章

最新更新