Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MVVM以编程方式向wpf datagrid添加列?_Wpf_Mvvm_Datagrid - Fatal编程技术网

如何使用MVVM以编程方式向wpf datagrid添加列?

如何使用MVVM以编程方式向wpf datagrid添加列?,wpf,mvvm,datagrid,Wpf,Mvvm,Datagrid,我想在WPF和MVVM应用程序的用户界面中创建一个透视表。因此列的数量不是静态的 我发现我可以通过编程从代码隐藏文件中添加列(如下面的代码片段所示) 但是我不想使用代码隐藏文件。我想用MVVM(从视图模型中)实现这一点。谁能给我一个解决办法吗?我找到了解决办法 答案很简单 在视图模型中定义DataTable 定义列(在我的例子中,我必须在foreach循环中以编程方式定义列) 添加行 然后为datagrid的ItemsSource属性绑定DataTable。(确保AutoGeneratedCol

我想在WPF和MVVM应用程序的用户界面中创建一个透视表。因此列的数量不是静态的

我发现我可以通过编程从代码隐藏文件中添加列(如下面的代码片段所示)

但是我不想使用代码隐藏文件。我想用MVVM(从视图模型中)实现这一点。谁能给我一个解决办法吗?

我找到了解决办法

答案很简单

  • 在视图模型中定义
    DataTable
  • 定义列(在我的例子中,我必须在
    foreach
    循环中以编程方式定义列)
  • 添加行
  • 然后为datagrid的
    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>