将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列,Qty
、Description
、Supplier
和PONumber
。因此,我写了以下内容:
<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
,并且只显示我想要的列?
我尝试的网站就在这里。
您的绑定是错误的:您应该使用Path
而不是XPath
。XPath
属性仅在绑定到XML数据源时使用。
<DataGridTextColumn Header="Qty" Binding="{Binding Path=Qty}" />
请注意,为了简洁起见,您可以省略"Path="
部分:
<DataGridTextColumn Header="Qty" Binding="{Binding Qty}" />
不要使用XPath
,而是尝试使用Path
,并给出不带$的确切property名称。
XPath
用于基于xml的数据源。对于对象,将使用Path
属性绑定。
您似乎正在从Bind
字符串到用于直接绑定Xml
的XPath
,您只需要使用Path
或只需声明属性。
示例:
<DataGridTextColumn Header="Qty" Binding="{Binding Qty}" />