如何以编程方式添加列与MVVM WPF数据网格?(How to programmatically a

2019-08-18 22:24发布

我想在MVVM应用程序中的WPF创建在用户界面中的数据透视表。 因此,列数不是一成不变的。

我发现,我可以以编程方式从代码中添加列隐藏文件(如下图所示的代码片段)。

myDataGrid.Columns.Add(column );

但我不想使用的代码隐藏文件。 我想和MVVM做到这一点(从视图模型 )。 谁能给我一个解决方案?

Answer 1:

我找到了解决办法。

答案很简单

  1. 定义DataTable视图模型
  2. 定义列(在我的情况,我不得不定义列programmatically一中foreach循环)
  3. 添加行
  4. 然后绑定的DataTable中ItemsSource DataGrid的财产。 (确保AutoGeneratedColumns=True

我的View Model

private DataTable sizeQuantityTable;

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

我已经assinged dummy data在构造

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>


文章来源: How to programmatically add columns to wpf datagrid with MVVM?