初学者问题。我在WPF表单中跟随XAML
。
<DataGrid x:Name="GridTable"
ItemsSource="{Binding GridDataSource}"
HorizontalGridLinesBrush="#FFE2E2E2"
VerticalGridLinesBrush="#FFE2E2E2"
CanUserAddRows="False"
CanUserResizeColumns="True"
Margin="10,140,214,10"
SelectionChanged="GridTableSelectionChanged" >
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="{Binding Selection}" ></DataGridCheckBoxColumn>
<DataGridTextColumn Header="{Binding XmlFile}"></DataGridTextColumn>
<DataGridTextColumn Header="{Binding Result}"></DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.Resources>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
</Style>
</DataGrid.Resources>
</DataGrid>
ViewModel代码
public string Selection
{
get { return "Selection"; }
}
public string XmlFile
{
get { return "Xml File"; }
}
public string Result
{
get { return "Result"; }
}
private DataTable CreateDataSource()
{
var dt = new DataTable();
var dc = new DataColumn(Selection, typeof(bool));
dt.Columns.Add(dc);
dc = new DataColumn(XmlFile, typeof(string));
dt.Columns.Add(dc);
dc = new DataColumn(Result, typeof(string));
dt.Columns.Add(dc);
return dt;
}
在填充数据后,我将此数据表用作网格的源。
我希望在运行我的应用程序时,我应该能够看到一个包含3列的数据网格,其中包含标题Selection
,XmlFile
和Result
作为绑定值。但我看到只有网格没有列。任何人都可以帮我理解这个错误吗?
另外,我想将数据源GridDataSource
附加到网格中。此数据表有3列,其名称与网格列和一些相关数据相同。当我在datatable中加载一些数据并通知它查看时,我看到已经有3个空列,然后是3个我的数据表列。任何人都可以帮我理解我的代码有什么问题。如果您需要更多信息,请告诉我。
修改
另外我注意到,当我的AutoGenerateColumns
标记设置为true时,我会在DataGrid中看到我的数据表的另外3列以及3个空列。当AutoGenerateColumns`标记设置为false时,我看不到任何数据,只看到3个空列。
答案 0 :(得分:0)
目前您正在绑定DataGridColumn.Header
,这意味着您的GridDataSource
应该公开3个属性(Selection
,XmlFile
和Result
)以显示在列中标题,而不是值。如果我了解您的问题和数据模型,我认为您要绑定的是Binding
,而不是Header
:
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Selection" Binding="{Binding Selection}"/>
<DataGridTextColumn Header="XmlFile" Binding="{Binding XmlFile}"/>
<DataGridTextColumn Header="Result" Binding="{Binding Result}"/>
</DataGrid.Columns>
DataGrid
还有AutoGenerateColumns
选项,可能会在此处使用,它会根据附加的数据源自动为您创建列,因此您无需指定{{1}手动
DataGrid.Columns