动态添加DataGrid到视图(MVVM)

时间:2014-05-26 15:13:15

标签: c# wpf mvvm wpfdatagrid

我正在尝试动态创建/删除DataGrids。我希望实现在某个属性更改时添加或从视图中删除整个DataGrid。 My View构造函数如下所示:

public Document(){
        InitializeComponent();
        ViewModel = new DocumentViewModel();
        ViewModel.PropertyChanged += (sender, e) => { Test2(); };
        Test();

    }

private void Test()
    {
        _grid = new DataGrid();
        _grid.Height = 100;
        _grid.Width = 100;


        DataGridTextColumn column = new DataGridTextColumn();
        column.Header = "test";
        _grid.Columns.Add(column);
        _panel.Children.Add(_grid);
        content.Children.Add(_panel);

    }

这是相应的XAML代码:

     <UserControl ... >      

        <Grid Name="content"> 

        </Grid> 
</UserControl>

因此,当ViewModel中的属性发生更改时,将执行方法“Test2”。我尝试在这个方法中添加另一个网格,如下所示:

  private void Test2()
    {
        DataGrid grid2 = new DataGrid();
        grid2.Height = 100;
        grid2.Width = 100;
        ((StackPanel) content.Children[0]).Children.Add(grid2); 
        content.UpdateLayout(); 
    }

但这不起作用。此外,如果我不从构造函数调用“Test”方法,但是当更改属性时,不会创建任何内容。我做错了什么?

2 个答案:

答案 0 :(得分:0)

您的代码应该有效。检查是否触发了PropertyChanged事件(以及在触发事件之前是否调用了Test()方法。)

检查StackPanel的大小 - 可能会添加第二个DataGrid,但由于StackPanel不够宽或不够,因此无法显示。

答案 1 :(得分:0)

与HighCore和其他人建议的一样,我最终使用ItemsControl并将其绑定到DataTables的集合。这适用于这种特殊情况,但是,我无法动态创建自定义列(例如,有一列只包含字符串值,另一列包含另一个组合框),我希望这样做。