2013-04-02 44 views
4

我想在MVVM應用程序的WPF用戶界面中創建一個數據透視表。所以列數不​​是靜態的。如何以編程方式向MVP添加列到wpf數據網格?

我發現我可以以編程方式從代碼後面的代碼中添加列(如下面的代碼片段所示)。

myDataGrid.Columns.Add(column); 

但我想使用的代碼隱藏文件。我想用MVVM做這個(從視圖模型)。任何人都可以爲我提供解決方案嗎?

回答

4

我找到了解決方案。

答案是簡單

  1. 在視圖模型定義DataTable
  2. 定義列(在我來說,我有一個foreach循環中定義列programmatically
  3. 添加行
  4. 然後將DataTable綁定了的ItemsSource財產數據網格。 (確保AutoGeneratedColumns=True

View Model

private DataTable sizeQuantityTable; 

public DataTable SizeQuantityTable 
    { 
     get 
     { 
      return sizeQuantityTable; 
     } 
     set 
     { 
      sizeQuantityTable = value; 
      NotifyPropertyChanged("SizeQuantityTable"); 
     } 
    } 

我已經在構造

public MainViewModel() 
{ 
     this.SizeQuantityTable = new DataTable(); 

     DataColumn sizeQuantityColumn = new DataColumn(); 
     sizeQuantityColumn.ColumnName = "Size Quantity"; 
     this.SizeQuantityTable.Columns.Add(sizeQuantityColumn); 

     DataColumn sColumn = new DataColumn(); 
     sColumn.ColumnName = "S"; 
     this.SizeQuantityTable.Columns.Add(sColumn); 

     DataColumn mColumn = new DataColumn(); 
     mColumn.ColumnName = "M"; 
     this.SizeQuantityTable.Columns.Add(mColumn); 

     DataRow row1 = this.SizeQuantityTable.NewRow(); 
     row1[sizeQuantityColumn] = "Blue"; 
     row1[sColumn] = "12"; 
     row1[mColumn] = "15"; 
     this.SizeQuantityTable.Rows.Add(row1); 

     DataRow row2 = this.SizeQuantityTable.NewRow(); 
     row2[sizeQuantityColumn] = "Red"; 
     row2[sColumn] = "18"; 
     row2[mColumn] = "21"; 
     this.SizeQuantityTable.Rows.Add(row2); 

     DataRow row3 = this.SizeQuantityTable.NewRow(); 
     row3[sizeQuantityColumn] = "Green"; 
     row3[sColumn] = "24"; 
     row3[mColumn] = "27"; 
     this.SizeQuantityTable.Rows.Add(row3); 

     DataRow row4 = this.SizeQuantityTable.NewRow(); 
     row4[sizeQuantityColumn] = "Yellow"; 
     row4[sColumn] = "30"; 
     row4[mColumn] = "33"; 
     this.SizeQuantityTable.Rows.Add(row4); 
    } 

view

<Window x:Class="Pivot.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:vm="clr-namespace:Pivot.ViewModels" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 

     <Grid.DataContext> 
      <vm:MainViewModel /> 
     </Grid.DataContext> 

     <DataGrid 
      ItemsSource="{Binding SizeQuantityTable}" 
      AutoGenerateColumns="True" 
      /> 

    </Grid> 
</Window> 
assinged dummy data
相關問題