2

初学者问题。XAML我的 WPF 表单中有以下内容。

    <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>

视图模型代码

    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 列和 headers 的数据网格SelectionXmlFile并且Result按照绑定值。但我看到的只是没有列的网格。谁能帮我理解这有什么问题?

我还想将数据源附加GridDataSource到网格。该数据表有 3 列与网格列和一些相关数据同名。当我在数据表中加载一些数据并通知它查看时,我看到已经存在 3 个空列,然后是我的数据表的更多 3 列。谁能帮我理解我的代码有什么问题。如果您需要更多信息,请告诉我。

编辑

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

4

1 回答 1

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>

还有一个 option ,DataGridAutoGenerateColumns这里可能有用,它将根据附加的数据源自动为您创建列,因此您不必DataGrid.Columns手动指定

<DataGrid AutoGenerateColumns="True" ..../>
于 2013-06-05T08:56:16.643 回答