我有一个标题列(列),然后是数据行,并希望在DataGrid中使用双向绑定显示它
列出标题=新列表{" FirstName"," LastName","年龄" };
列表row1 =新列表{" John"," Doe"," 19" };
列表row2 =新列表{"简"," Doe"," 21" };
列表row3 =新列表{" Suzie"," Q"," 52" };
列表row4 =新列表{" No"," Body"," 48" };
列表> tableValues = 新名单> {row1,row2,row3,row4};
编辑器不允许我显示列表列表,因为它有多个<
我感谢任何帮助。
答案 0 :(得分:1)
首先创建一个类来保存您的人员信息,因为您初始化列表的方式并不好。
Public class Person
{
public string Firstname {get; set;}
public string Surname {get; set;}
public int Age {get; set;}
}
然后你可以创建多个人并将它们存储在Person类型的列表中......例如
//other code
List<Person> People = new List<Person>();
People.Add(new Person() { Firstname = "John", Surname = "Doe", Age = 19 });
//etc
然后在XAML中,您所要做的就是将数据网格指向人员列表,它应该能够绑定到每个人的各种属性或自动生成列。
<DataGrid CanUserSortColumns="True"
CanUserAddRows="False"
CanUserDeleteRows="False"
AutoGenerateColumns="False"
ItemsSource="{Binding Path=People}"
SelectionMode="Single">
<DataGrid.Columns>
<DataGridTextColumn MinWidth="100"
Width="Auto"
IsReadOnly="False"
Header="Firstname">
<DataGridTextColumn.Binding>
<Binding Path="Firstname"/>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
未经测试的XAML,但应该给你一个起点
网上有很多指南可以帮助解决这个问题,而不是在Stack Overflow上编写你自己的问题。
答案 1 :(得分:1)
鉴于标题数量可能不同,我建议以便于双向数据绑定的格式转换数据并使用DataTable:
var dt = new DataTable();
// create columns and headers
int columnCount = headers.Count;
for (int i = 0; i < columnCount; i++)
dt.Columns.Add(headers[i]);
// copy rows data
for (int i = 0; i < tableValues.Count; i++)
dt.Rows.Add(tableValues[i].Take(columnCount).ToArray());
// display in a DataGrid
dataGrid.ItemsSource = dt.DefaultView;