我有很多这样的课:
public class ClassA
{
public decimal ID_A { get; set; } = 0;
public string MyProperty1 { get; set; } = "";
public string MyProperty2 { get; set; } = "";
}
public class ClassB
{
public decimal ID_B { get; set; } = 0;
public string MyProperty1 { get; set; } = "";
public string MyProperty2 { get; set; } = "";
public string MyProperty3 { get; set; } = "";
}
这些类应该显示在DataGrid中。对于测试,我只是添加了一个包含两个按钮的窗口。第一部分包括:
List<ClassA> a = new List<ClassA>()
{
new ClassA { ID_A = 1, MyProperty1 = "Ap1", MyProperty2 = "p1"} ,
new ClassA { ID_A = 2, MyProperty1 = "Ap2", MyProperty2 = "p2"}
};
ListaDanych FLista = new ListaDanych(a);
FLista.Show();
第二个:
List<ClassB> b = new List<ClassB>()
{
new ClassB { ID_B = 1, MyProperty1 = "Bp1", MyProperty2 = "p1", MyProperty3 = "3"} ,
new ClassB { ID_B = 2, MyProperty1 = "Bp2", MyProperty2 = "p2", MyProperty3 = "3"}
};
ListaDanych FLista = new ListaDanych(b);
FLista.Show();
这两个按钮只是生成带有测试数据的列表并运行我的第二个窗口。
在第二个窗口中,我只是为每个类添加一个构造函数:
private List<ClassA> _MojeDaneA;
private List<ClassB> _MojeDaneB;
public ListaDanych(List<ClassA> ListaDanych)
{
_MojeDaneA = ListaDanych;
InitializeComponent();
DGDane.ItemsSource = ListaDanych;
}
public ListaDanych(List<ClassB> ListaDanych)
{
_MojeDaneB = ListaDanych;
InitializeComponent();
DGDane.ItemsSource = ListaDanych;
}
但是我可以用更通用的方式来做这件事吗?只为所有现有的类添加一个构造函数?
第二个问题:如何根据构造函数中传递的类类型为DataGrid添加自定义头?
2条答案
按热度按时间s3fp2yjn1#
对象不工作,但IELTS正在工作。
这是我现在的代码:
UCDataGrid_A只是自定义控件。它包含:
我不知道这是不是最好的方法,但它很有效。
对我来说,它有两个好处:
1.我可以看到我的DataGrid是什么样子
1.我可以在一个单独的文件中为每个类定义
ivqmmu1c2#
下面是
ListaDanych
窗口中更通用的构造函数和自定义头的代码:在这段代码中,有一个接受
object
参数的构造函数。根据对象的类型,它为DataGrid
设置数据源,并相应地定制列标题。SetHeaders
方法检查数据源的类型,并根据类型分配头。请记住根据类的属性调整列索引和标题名称。这种方法避免了为每个类构造函数重复代码,并提供了一个更通用的解决方案。