缺少Datagrid列标题值

时间:2013-06-05 07:56:17

标签: .net wpf xaml wpf-controls wpfdatagrid

初学者问题。我在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列的数据网格,其中包含标题SelectionXmlFileResult作为绑定值。但我看到只有网格没有列。任何人都可以帮我理解这个错误吗?

另外,我想将数据源GridDataSource附加到网格中。此数据表有3列,其名称与网格列和一些相关数据相同。当我在datatable中加载一些数据并通知它查看时,我看到已经有3个空列,然后是3个我的数据表列。任何人都可以帮我理解我的代码有什么问题。如果您需要更多信息,请告诉我。

修改

另外我注意到,当我的AutoGenerateColumns标记设置为true时,我会在DataGrid中看到我的数据表的另外3列以及3个空列。当AutoGenerateColumns`标记设置为false时,我看不到任何数据,只看到3个空列。

1 个答案:

答案 0 :(得分:0)

目前您正在绑定DataGridColumn.Header,这意味着您的GridDataSource应该公开3个属性(SelectionXmlFileResult)以显示在列中标题,而不是值。如果我了解您的问题和数据模型,我认为您要绑定的是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