将DataGrid绑定到List <t>,但仅显示T的属性选择</t>

时间:2013-07-08 21:38:19

标签: c# wpf binding datagrid

所以,有一个自定义类Material

class Material
{
    public string Qty { get; set; }
    public string Description { get; set; }
    public string Supplier { get; set; }
    public string PONumber { get; set; }
    public string RigName { get; set; }
    public string ProjectName { get; set; }
    public string ShipTo { get; set; }
    public string ShipVia { get; set; }

    public Material()
    {
        Qty = "5";
        Description = "This is a test";
        Supplier = "Wal-Mart";
        PONumber = "23423";
        RigName = "Test Rig";
        ProjectName = "Test Project";
        ShipTo = "Kevin";
        ShipVia = "Danny";
    }
}

我有list Material

var myList = new List<Material>
                 {
                     new Material()
                 };

并将其设置为DataGrid的项目来源:

dataGrid1.ItemsSource = myList;

现在,在XAML中,如果我设置了AutoGenerateColumns="True",它会根据dataGrid1的属性为Material创建标头。但是,我只需要4列,QtyDescriptionSupplierPONumber。所以,我写了以下内容:

 <DataGrid AutoGenerateColumns="False"
                          Name="dataGrid1">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Qty"
                                            Binding="{Binding XPath=@Qty}" />

                        <DataGridTextColumn Header="Description"
                                            Binding="{Binding XPath=@Description}" />

                        <DataGridTextColumn Header="Supplier"
                                            Binding="{Binding XPath=@Supplier}" />

                        <DataGridTextColumn Header="PO#"
                                            Binding="{Binding XPath=@PONumber}" />
                    </DataGrid.Columns>
                </DataGrid>

我的问题是,现在dataGrid1是空的。我有一种感觉,我错过了一些完全愚蠢的东西,我希望一双新鲜的眼睛可以帮助我发现这一点。

所以,我的问题是,我是否采取了错误的方式?有没有办法将List<Material>绑定到dataGrid1,只显示我想要的列?

我尝试的网站是herehere

3 个答案:

答案 0 :(得分:2)

您的绑定错误:您应该使用Path而不是XPathXPath属性仅在绑定到XML数据源时使用。

<DataGridTextColumn Header="Qty" Binding="{Binding Path=Qty}" />

请注意,为简洁起见,您可以省略"Path="部分:

<DataGridTextColumn Header="Qty" Binding="{Binding Qty}" />

答案 1 :(得分:1)

而不是XPath,请尝试Path,并在没有$。

的情况下提供确切的属性名称

XPath用于基于xml的数据源。对于对象,使用Path属性绑定。

答案 2 :(得分:1)

您似乎将Bind转移到用于直接XPath绑定的Xml,您只需要使用Path或仅声明属性。< / p>

示例:

 <DataGridTextColumn Header="Qty" Binding="{Binding Qty}" />