我正在尝试将List
绑定到DataGrid
。
以下是代码段:
public class Parson
{
public string LastName { get; set; }
public string FirstName { get; set; }
public Parson(string lastName, string firstName)
{
LastName = lastName;
FirstName = firstName;
}
}
public class Persons : List<Parson>
{
// Parameterless constructor
public Persons()
{
}
public new void Add(Person parson)
{
base.Add(parson);
}
}
背后的代码:
Persons persons = new Persons();
persons.Add(new Parson("New","Person");
dataGrid1.DataContext = persons;
XAML:
<my:DataGrid Name="dataGrid1"
xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
CanUserAddRows="True"
ItemsSource="{Binding}"
AutoGenerateColumns="False">
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"/>
<my:DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}"/>
</my:DataGrid.Columns>
</my:DataGrid>
结果是显示空网格! 谁知道为什么?
答案 0 :(得分:5)
尝试设置AutoGenerateColumns = true
答案 1 :(得分:5)
(注意:此答案在.NET Framework v4.0中得到验证):
一个简单的,由4部分组成的操作...
AutoGenerateColumns="False"
(您应该能够手动执行此操作,而不是自动执行此操作)ItemsSource="{Binding}"
上,它通知网格它将从设计时未定义的源中获取它的列和行数据。Binding="{Binding Path=UniqueID}"
之类的每个绑定到列数据。请注意,Path之后的值是内插的,因此请注意区分大小写。对于List&lt;&gt;您正在定位该值可能是目标List&lt;&gt;中对象的属性名称之一。根据DataGrid中每列的需要冲洗并重复多次。{gridControlName}.DataContext = {target-List<>}
加载表单时,其网格应自动填充List&lt;&gt;中对象的内容。
答案 2 :(得分:1)
尝试设置ItemsSource而不是DataContext,并从XAML中删除ItemsSource={Binding}
。这可能就是诀窍。
编辑:
我刚刚检查了一些我编写的使用相同DataGrid控件(WPF Toolkit)的代码,事实上我确实设置了ItemsSource而不是DataContext。如果您需要一个例子,请告诉我。
答案 3 :(得分:0)
在您的DataGrid中尝试:
ItemsSource="{Binding Path=.}"
这对我来说是成功的。