如何使用MVVM以编程方式向wpf datagrid添加列?
我想在WPF和MVVM应用程序的用户界面中创建一个透视表。因此列的数量不是静态的 我发现我可以通过编程从代码隐藏文件中添加列(如下面的代码片段所示) 但是我不想使用代码隐藏文件。我想用MVVM(从视图模型中)实现这一点。谁能给我一个解决办法吗?我找到了解决办法 答案很简单如何使用MVVM以编程方式向wpf datagrid添加列?,wpf,mvvm,datagrid,Wpf,Mvvm,Datagrid,我想在WPF和MVVM应用程序的用户界面中创建一个透视表。因此列的数量不是静态的 我发现我可以通过编程从代码隐藏文件中添加列(如下面的代码片段所示) 但是我不想使用代码隐藏文件。我想用MVVM(从视图模型中)实现这一点。谁能给我一个解决办法吗?我找到了解决办法 答案很简单 在视图模型中定义DataTable 定义列(在我的例子中,我必须在foreach循环中以编程方式定义列) 添加行 然后为datagrid的ItemsSource属性绑定DataTable。(确保AutoGeneratedCol
DataTable
foreach
循环中以编程方式定义列)ItemsSource
属性绑定DataTable。(确保AutoGeneratedColumns=True
)视图模型
私有数据表sizequalitytable;
公共数据表SizeQuantityTable
{
得到
{
返回大小相等的表;
}
设置
{
sizeQuantityTable=值;
NotifyPropertyChanged(“SizeQuantityTable”);
}
}
我在构造函数中分配了虚拟数据
public主视图模型()
{
this.SizeQuantityTable=新数据表();
DataColumn sizeQuantityColumn=新DataColumn();
sizeQuantityColumn.ColumnName=“大小数量”;
this.SizeQuantityTable.Columns.Add(sizeQuantityColumn);
DataColumn sColumn=新DataColumn();
sColumn.ColumnName=“S”;
this.SizeQuantityTable.Columns.Add(sColumn);
DataColumn mColumn=新DataColumn();
mColumn.ColumnName=“M”;
this.SizeQuantityTable.Columns.Add(mColumn);
DataRow row1=this.SizeQuantityTable.NewRow();
第1行[sizeQuantityColumn]=“蓝色”;
行1[sColumn]=“12”;
第1行[mColumn]=“15”;
this.SizeQuantityTable.Rows.Add(第1行);
DataRow row2=this.SizeQuantityTable.NewRow();
第2行[sizeQuantityColumn]=“红色”;
第2行[sColumn]=“18”;
第2行[mColumn]=“21”;
this.SizeQuantityTable.Rows.Add(第2行);
DataRow row3=this.SizeQuantityTable.NewRow();
第3行[sizeQuantityColumn]=“绿色”;
第3行[sColumn]=“24”;
第3行[mColumn]=“27”;
this.SizeQuantityTable.Rows.Add(第3行);
DataRow row4=this.SizeQuantityTable.NewRow();
第4行[sizeQuantityColumn]=“黄色”;
第4行[sColumn]=“30”;
第4行[mColumn]=“33”;
this.SizeQuantityTable.Rows.Add(第4行);
}
我的视图
<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>
<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>