Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-仅显示基类属性的DataGrid_C#_Wpf_Datagrid - Fatal编程技术网

C# WPF-仅显示基类属性的DataGrid

C# WPF-仅显示基类属性的DataGrid,c#,wpf,datagrid,C#,Wpf,Datagrid,我试图用多个对象的列表填充数据网格。这些对象都是基类固有的。我成功地显示了DataGrid中的列和行,但是我只看到基类的属性,而没有看到子类的属性 不幸的是,我在网上搜索时找不到很多有用的信息。但我对WPF和C还是新手,所以也许这就是问题所在 如何让DataGrid显示基类和子类的所有属性 编辑: 我有几个从基类继承的类(比如a、B、C),我有一个类型列表list,其中包含多个类型的多个对象。我需要显示数据网格中的所有不同子类。您的列表中的T是什么?类型元数据是从中推断出来的(至少在winfor

我试图用多个对象的
列表
填充数据网格。这些对象都是基类固有的。我成功地显示了DataGrid中的列和行,但是我只看到基类的属性,而没有看到子类的属性

不幸的是,我在网上搜索时找不到很多有用的信息。但我对WPF和C还是新手,所以也许这就是问题所在

如何让DataGrid显示基类和子类的所有属性

编辑:
我有几个从基类继承的类(比如a、B、C),我有一个类型列表
list
,其中包含多个类型的多个对象。我需要显示数据网格中的所有不同子类。

您的
列表中的
T
是什么?类型元数据是从中推断出来的(至少在winforms绑定中是这样;因此我假设这也适用于WPF)。因此,如果您有一个
列表
,那么只会显示
基类
的属性。尝试使用
列表
代替。

尝试使用
列表
代替
列表


类基
{
}
派生类1:基
{
公共字符串Prop1{get;set;}
}
派生类2:基
{
公共字符串Prop2{get;set;}
}
已加载私有无效窗口(对象发送器、路由目标)
{
this.DataContext=新列表()
{
新的Derived1(){Prop1=“Hello”},
新的Derived2(){Prop2=“World”}
};
}

这对我有用。我在第一行看到Hello,在第二行看到World。

我认为您可以绑定属于子类的DataGridColumn


子类的对象名称。对应子类的属性名称

如果我需要显示多个DerivedClass和基类的属性,该怎么办?一个
列表
应该显示对象层次结构中直到
DerivedClass
的所有内容,但大多数网格只能显示同质数据——只有在对象之间存在某种共性时,它才会起作用。因此,如果您的意思是有一个
A:BaseClass
和一个
B:BaseClass
,那么您不能同时显示
A
属性和
B
属性。您可以显示共享属性,也可以创建一个仅包含
a
对象或
B
对象的列表(分别位于
列表
列表
中)。但是,如果您有
C:BaseClass
a:C
B:C
,然后一个
列表
将显示从
基类
C
的所有内容。是的,这非常有效。我现在唯一的问题是我有空列。DataGrid中是否有自动隐藏空列的属性?我和一个同学找了一个,但找不到。在DataGridColumns上设置MinWidth=“0”Width=“Auto”
<DataGrid ItemsSource="{Binding}">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Prop1}" />
            <DataGridTextColumn Binding="{Binding Prop2}" />
        </DataGrid.Columns>
</DataGrid>
class Base
{
}

class Derived1: Base
{
    public string Prop1 { get; set; }
}

class Derived2: Base
{
    public string Prop2 { get; set; }
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    this.DataContext = new List<Base>()
    {
        new Derived1(){Prop1 = "Hello"},
        new Derived2() {Prop2 = "World"}
    };
}