所以,有一个自定义类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列,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
,只显示我想要的列?
答案 0 :(得分:2)
您的绑定错误:您应该使用Path
而不是XPath
。 XPath
属性仅在绑定到XML数据源时使用。
<DataGridTextColumn Header="Qty" Binding="{Binding Path=Qty}" />
请注意,为简洁起见,您可以省略"Path="
部分:
<DataGridTextColumn Header="Qty" Binding="{Binding Qty}" />
答案 1 :(得分:1)
答案 2 :(得分:1)
您似乎将Bind
转移到用于直接XPath
绑定的Xml
,您只需要使用Path
或仅声明属性。< / p>
示例:
<DataGridTextColumn Header="Qty" Binding="{Binding Qty}" />