2013-10-09 44 views
0

我有一個需求,我需要從DataTable中直接顯示數據,即不需要對單元進行編輯。另一個要求是我需要顯示Combobox作爲每列的標題。其次,第一列需要是checkbox,檢查哪一行是灰色的。我認爲這應該是可行的DataGrid,但我不確定,因爲我無法找到辦法做到這一點。使用視圖模型將數據表綁定到DataGrid

可以請有人幫助我。請注意,我希望使用MVVM方式,而不是在xaml.cs中編寫代碼。

熱切期待着回覆。

在此先感謝。

編輯:代碼添加雖然它沒有太大的... 的.xaml

<DataGrid HorizontalAlignment="Left" Margin="0,274,0,0" VerticalAlignment="Top" Height="321" Width="981" AutoGenerateColumns="True" ItemsSource="{Binding Path=UploadedProductData, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"> 
      <DataGrid.Columns> 
       <DataGridTemplateColumn CanUserReorder="False" CanUserResize="False"> 
        <DataGridTemplateColumn.HeaderTemplate> 
         <DataTemplate> 
          <ComboBox HorizontalAlignment="Right" VerticalAlignment="Top" Width="100"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.HeaderTemplate> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 
     </DataGrid> 

在主窗口的視圖模型 -

DataTable _uploadedProductData; 
     public DataTable UploadedProductData 
     { 
      get { return _uploadedProductData; } 
      set 
      { 
       _uploadedProductData = value; 
      } 
     } 

以上是財產。

在xaml.cs - 我設定的上述屬性 - 一些按鈕事件,你在你的要求說

ViewModel.UploadedProductData = dt; 
+1

有很多教程會幫助你,但我不會去搜索它們,只是給你答案。我給你的一個建議是不要直接使用數據表,而是把它變成一個集合(畢竟這是MVVM的方式);無論是手動或藉助一些庫,將行映射到類的實例。然後,您可以添加一個代表複選框的單獨屬性,並使用綁定來解決其他所有問題。 DataGrid有許多選項可用於您需要指定的各種模板,這就是它。 –

+0

新用戶越來越多地來到「StackOverflow」並尋求完整項目的幫助。這是*不* *什麼StackOverflow是。我們的想法是,每個開發人員*都會自己完成工作*,並且只會在這裏提出如何解決特定問題,同時提供他們的代碼示例。從[StackOverflow幫助中心](http://stackoverflow.com/help/dont-ask),*您的問題應合理範圍。如果你可以想象整本書能夠回答你的問題,那麼你的要求太高了。*請閱讀幫助頁面。 – Sheridan

+0

是的 - 其實我確實經歷了一些教程,但我不確定如何構建GRID模板,這就是我的主要問題,......這種方法。此外,我提供了DataTable使事情變得更簡單,我可以肯定地在最終版本中通過一個類來做到這一點。感謝您的迴應。 – Saket

回答

0

一切都是完全有可能在WPF。 WPF大部分都是可能的。現在您已經提供了一些代碼,我可以看到您缺少所需的INotifyPropertyChanged接口...單擊此鏈接獲取幫助。您需要實現這個功能,以便在屬性值更改後更新UI ...您是否看到如何包含代碼示例已爲您工作?

確實有可能創建一個DataTemplate定義什麼是在DataGridHeader部分看到。你可以認爲DataTemplate的,作爲一個特定數據的微小視圖,可以使用DataGrid.RowHeaderTemplate財產,你已經幾乎得到了設置DataTemplateHeader

<DataGrid> 
    <DataGrid.RowHeaderTemplate> 
     <DataTemplate> 
      <!--Define how you want the header to look here--> 
     <DataTemplate> 
    </DataGrid.RowHeaderTemplate> 
</DataGrid> 

現在,當涉及到結合這些單元格,它確實取決於您正在使用的對象。在WPF中,習慣(但不是強制性的)創建精確表示數據的數據類型對象。在你的情況下,我假設你只會使用你的DataTable對象,所以它是重要的列名。

最好是使用DataGridTextColumn列顯示文本和你可以也選擇使用DataGridTextColumn.HeaderTemplate代替如果希望Header爲不同的列是不同的:

<DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding Path=ColumnName0}"> 
     <DataGridTextColumn.HeaderTemplate> 
      <ComboBox HorizontalAlignment="Right" VerticalAlignment="Top" Width="100"/> 
     </DataGridTextColumn.HeaderTemplate> 
    </DataGridTextColumn> 
    <DataGridTextColumn Header="First Name" Binding="{Binding Path=ColumnName1}" /> 
    <DataGridTextColumn Header="Last Name" Binding="{Binding Path=ColumnName2}" /> 
</DataGrid.Columns> 

現在我猜測你會問如何填充ComboBox.ItemsSource項目集合,但我沒有時間。爲此,我會將您的帖子轉介給WPF ComboBox in DataGridTemplateColumn with alternate ItemsSource,並說如果這對您沒有幫助,您可以從互聯網搜索中輕鬆找到這些信息。

+0

首先,感謝您的迴應。現在,這工作,我能綁定我的數據表。對於組合框,我將按照我在其他表單上的操作進行管理。再次感謝 !!!看了你提供的代碼後 - 我覺得很愚蠢!在我的搜索中,我從來沒有得到 - ** DataGridTextColumn **我一直在嘗試將TextBlock綁定到Datatable單元格 - 不知何故。 – Saket

+0

嘿,不久之前我也犯了類似的錯誤......這都是學習經歷的一部分。 – Sheridan

相關問題