2013-06-05 109 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