将DataGrid绑定到wpf中的List

时间:2009-11-13 20:53:01

标签: wpf data-binding datagrid

我正在尝试将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>

结果是显示空网格! 谁知道为什么?

4 个答案:

答案 0 :(得分:5)

尝试设置AutoGenerateColumns = true

答案 1 :(得分:5)

(注意:此答案在.NET Framework v4.0中得到验证):

一个简单的,由4部分组成的操作...

  • 首先,在XAML标记中的DataGrid控件上,我建议您设置AutoGenerateColumns="False"(您应该能够手动执行此操作,而不是自动执行此操作)
  • 第二,在同一个控件集ItemsSource="{Binding}"上,它通知网格它将从设计时未定义的源中获取它的列和行数据。
  • 第三,构造列以查看您希望它们如何查看以及使用Binding="{Binding Path=UniqueID}"之类的每个绑定到列数据。请注意,Path之后的值是内插的,因此请注意区分大小写。对于List&lt;&gt;您正在定位该值可能是目标List&lt;&gt;中对象的属性名称之一。根据DataGrid中每列的需要冲洗并重复多次。
  • 第四,在您的表单代码隐藏中,在构造函数内或在表单加载期间或最适合您的需求的地方,设置网格的DataContext。这应该采用类似于{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=.}"

这对我来说是成功的。