如何在运行时创建派生自ObservableCollection<;T>;

本文关键字:lt gt ObservableCollection 运行时 创建 派生 | 更新日期: 2023-09-27 18:22:09

如何在运行时创建从ObservableCollection 派生的类的实例

视图模型和模型如下所示:-C#编码

public class Mobile
{
    ObservableCollection<MobileModelInfo> SourceCollection = new ObservableCollection<MobileModelInfo>();
    private void CreateObject(ObservableCollection<MobileModelInfo> Source)
    {
        /// Create an Object for MobileModelInfo Class in Runtime and add the Values
    }
    private ObservableCollection<MobileModelInfo> CostructMobileModel()
    {
        SourceCollection.Add(new MobileModelInfo { Name = "iPhone 4", Catagory = "Smart Phone", Year = "2011" });
        SourceCollection.Add(new MobileModelInfo { Name = "S6", Catagory = "Ultra Smart Phone", Year = "2015" });
        CreateObject(SourceCollection);
        return SourceCollection;
    }
}
public class MobileModelInfo
{
    public string Name { get; set; }
    public string Catagory { get; set; }
    public string Year { get; set; }
}

如何在运行时创建派生自ObservableCollection<;T>;

根据您给出的示例,您不需要ObservableCollection类型的支持变量;只需从中继承,您的Mobile类就会成为MobileModelInfo s的可观察集合。注意:使用以下设计模式绑定到它要容易得多。

public class Mobile : ObservableCollection<MobileModelInfo>
{
    public Mobile()
    {
        Add(new MobileModelInfo { Name = "foo", Category = "boo", Year = 1988 } );
    }
    public Mobile GetList()
    {
        return this;
    }
}

我得到了这个问题的解决方案。下面是C#函数,它在运行时创建一个从ObservableCollection 派生的类的实例

private void CreateObject(ObservableCollection<MobileModelInfo> Source)
{
    var gType = Source.GetType();
    string collectionFullName = gType.FullName;
    Type[] genericTypes = gType.GetGenericArguments();
    string className = genericTypes[0].Name;
    string classFullName = genericTypes[0].FullName;
    // Get the type contained in the name string
    Type type = Type.GetType(classFullName, true);
    // create an instance of that type
    object instance = Activator.CreateInstance(type);
    // List of Propery for the above created instance of a dynamic class
    List<PropertyInfo> oProperty = instance.GetType().GetProperties().ToList();
}