DataGrid至少需要一个解决方案ListView (View == GridView)
有一堂课。像这样的东西
public class MyClass
{
public List<MyClass2> List1 { get; set; }
public List<MyClass2> List2 { get; set; }
}
必须按照我准备的模板将其显示在表单List1的第一列中коллекции<MyClass2>,然后根据我准备的模板将每个元素List2显示在单独的列中MyClass2。自然,对于коллекции<MyClass>每个元素具有相同数量的元素List2
问题是
<DataGrid ItemsSource={Binding ...} ItemTemplateSelector={SomeSelector}>
</DataGid>
不工作。我的不具体工作DataTemplateSelector。该程序甚至不访问它(我在标记中正确指定了它,它正在创建中)。
在ListView代码的情况下略有不同,但大体含义是相同的。
当我尝试在代码中创建列时,我不知道如何从模板访问 ViewModel 中的必填字段。都是因为它DataGridTemplateColumn没有绑定,所以我在模板中有整行。如果不是动态创建的列,我会为每个列创建一个单独的模板来绑定到所需的字段,但在这种情况下,我不知道所有的字段。会有多少人?List2[0], List2 1 .... 以此类推。
升级版:
这是设置数据时结果的样子
new List<MyClass>
{
new MyClass
{
List1 = new List<MyClass2>
{
new MyClass2(),
new MyClass2(),
new MyClass2(),
},
List2 = new List<MyClass2>
{
new MyClass2(),
new MyClass2(),
new MyClass2(),
//и тд.
},
},
}
如您所见,List1 在列中显示为一组容器,这些容器由 MyClass2 类型的元素组成,而 List2 被逐个元素分解为列,其中每个列有一个元素。
UPD2:
到目前为止,找到了一个可以在这里使用的选项https://stackoverflow.com/questions/20493184/datagridtemplatecolumns-autogeneratecolumns-true-and-binding-to-a-datatable(在标记为答案的答案中)但它很难看在支持计划中

总的来说,我决定
创建了自定义列类型
此外,在生成列的事件处理程序中,我这样做
在窗口资源中我有相应的模板
你可以,当然,完成通常很漂亮
DataTemplateSelector,但是没有时间。如果有人需要它,那么完成它很容易。而且,当然,我把模型本身变成了
DataTable. 我不会给出转换代码,这已经是一个特定的任务。只需在此处创建具有必要名称和类型的列(我按原样保存数据类型,即typeof(MyClass2))