2013-06-05 145 views
2

初学者问题。我在我的WPF表单中有以下XAMLDatagrid列标题值丢失

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

我使用这个数据表作为源为我网在其填充数据后。

我希望当我运行我的应用程序时,我应该能够看到一个数据网格,其中包含标题SelectionXmlFileResult作为每个绑定值的3列。但我看到的只是没有列的网格。任何人都可以帮助我理解这是什么错误?

另外我想附加一个数据源GridDataSource到网格。该数据表有3列与网格列和一些相关数据具有相同的名称。当我在数据表中加载一些数据并通知它查看时,我发现已经存在3个空列,然后是我的数据表的更多3列。任何人都可以帮助我理解我的代码有什么问题。让我知道你是否需要更多信息。

编辑

而且我注意到,当我的AutoGenerateColumns标记设置为true,那么我看到3分空列沿着我的DataGrid中的数据表的另外3列。当AutoGenerateColumns标签设置为false时,我看不到任何数据,只能看到3个空列。

+0

您可以发布底层VM吗?在调试窗口中是否收到了任何'BindingExpression'错误? – DHN

+0

看到编辑......午餐一小时:) – Sandy

+0

享受你的午餐 - 有什么关于'BindingExpression'错误? – DHN

回答

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> 

DataGridAutoGenerateColumns选项,这可能是这里使用的,它会自动创建列您基于附加的数据源,因此您不必指定DataGrid.Columns

<DataGrid AutoGenerateColumns="True" ..../> 
+0

我认为不....我试图将头文本绑定到ViewModel中的属性。现在我再次尝试将网格的数据源绑定到数据表。由于我想使用现有的datagrid列,我使用相同的列名准备了数据,以便绑定成功。 – Sandy

+0

从技术上讲,当绑定'DataGridCheckBoxColumn'时,我需要在ViewModel中有一个'DataRowView',但我现在只有一个字符串。而我将所有数据都放在数据表中。 – Sandy

+0

但是,然后自动生成列将做你想要的。它会绑定数据并为您创建列标题。 [Here](http://db.tt/cwhpUhQo)是我的简单示例,它将从我的模型视图绑定到DataTable并自动生成列。由于您的列标题是从创建点开始设置的,因此您不必再次绑定它。 – dkozl