4
我想在MVVM應用程序的WPF用戶界面中創建一個數據透視表。所以列數不是靜態的。如何以編程方式向MVP添加列到wpf數據網格?
我發現我可以以編程方式從代碼後面的代碼中添加列(如下面的代碼片段所示)。
myDataGrid.Columns.Add(column);
但我不想使用的代碼隱藏文件。我想用MVVM做這個(從視圖模型)。任何人都可以爲我提供解決方案嗎?
我想在MVVM應用程序的WPF用戶界面中創建一個數據透視表。所以列數不是靜態的。如何以編程方式向MVP添加列到wpf數據網格?
我發現我可以以編程方式從代碼後面的代碼中添加列(如下面的代碼片段所示)。
myDataGrid.Columns.Add(column);
但我不想使用的代碼隱藏文件。我想用MVVM做這個(從視圖模型)。任何人都可以爲我提供解決方案嗎?
我找到了解決方案。
答案是簡單。
DataTable
foreach
循環中定義列programmatically
)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