将DataGrid绑定到wpf中的List

Alo*_*azi 6 data-binding wpf 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);
    }
}  
Run Code Online (Sandbox Code Playgroud)

背后的代码:

Persons persons = new Persons();
persons.Add(new Parson("New","Person");
dataGrid1.DataContext = persons;
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

小智 5

尝试设置 AutoGenerateColumns = true


Har*_*ryv 5

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

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

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

加载表单时,其网格应自动填充List <>中对象的内容.


Mar*_*ter 1

尝试设置 ItemsSource 而不是 DataContext,并ItemsSource={Binding}从 XAML 中删除。这可能会起作用。

编辑:

我刚刚检查了我编写的一些使用相同 DataGrid 控件(WPF Toolkit)的代码,并且实际上我设置了 ItemsSource 而不是 DataContext。如果您需要示例,请告诉我。