将DataGrid绑定到列表<;T>;,但仅示出选择T';的属性

本文关键字:属性 选择 gt 绑定 DataGrid 列表 lt | 更新日期: 2023-09-27 18:21:29

因此,有一个自定义类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";
    }
}

我有一个Material:的list

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

它被设置为我的DataGrid:的项目源

dataGrid1.ItemsSource = myList;

现在,在XAML中,如果我设置AutoGenerateColumns="True",它将基于Material的属性为dataGrid1创建标头。但是,我只想要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,并且只显示我想要的列?

我尝试的网站就在这里。

将DataGrid绑定到列表<;T>;,但仅示出选择T';的属性

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

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

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

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

不要使用XPath,而是尝试使用Path,并给出不带$的确切property名称。

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

您似乎正在从Bind字符串到用于直接绑定XmlXPath,您只需要使用Path或只需声明属性。

示例:

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