C# 数据绑定子类

C# 数据绑定子类,c#,data-binding,subclass,C#,Data Binding,Subclass,假设我有这3门课: public class ClassParent { public string TestParent { get; set; } } public class ClassChild1 : ClassParent { public string TestChild1 { get; set; } } public class ClassChild2 : ClassParent { public string TestChild2 { get

假设我有这3门课:

public class ClassParent  
{  
public string TestParent { get; set; }  
}

public class ClassChild1 : ClassParent   
{   
public string TestChild1 { get; set; }   
}

public class ClassChild2 : ClassParent
{  
public string TestChild2 { get; set; }  
}
比如说,我已经创建了大量的ClassChild1和ClassChild2类型的对象,并存储在这个列表中:
列表\u测试

我想将此列表绑定到GridView
DataSource=\u Test

这是可行的,但它只显示网格中的一个字段(ClassParent类中的TestParent属性)。我理解原因:列表由“ClassParent”对象组成,因此绑定只使用该类的属性。问题是ClassChild1和ClassChild2类型的对象继承自ClassParent


我的问题是:如果我有一个不同类型但都继承自同一类的对象列表,如何将所有属性绑定到网格?

您可以手动创建列,而不是从类型推断出它们。这样,您就可以绑定到所需的任何属性。

这些属性必须存在于基类中。否则,在未定义它们的子类中如何访问它们?(您希望网格为
ClassChild2.TestChild1
显示什么内容?)

解决此问题的一种方法是将
TestChild1
TestChild2
定义为
ClassParent
对象的虚拟属性,然后在子对象中覆盖它们:

public class ClassParent  
{  
    public string TestParent { get; set; }  
    public virtual string TestChild1 { get {return null;}}
    public virtual string TestChild2 { get {return null;}}  
}

public class ClassChild1 : ClassParent   
{   
    public override string TestChild1 { get; set; }   
}

public class ClassChild2 : ClassParent
{  
    public override string TestChild2 { get; set; }  
}