我正在尝试动态创建/删除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”方法,但是当更改属性时,不会创建任何内容。我做错了什么?
答案 0 :(得分:0)
您的代码应该有效。检查是否触发了PropertyChanged事件(以及在触发事件之前是否调用了Test()方法。)
检查StackPanel的大小 - 可能会添加第二个DataGrid,但由于StackPanel不够宽或不够,因此无法显示。
答案 1 :(得分:0)
与HighCore和其他人建议的一样,我最终使用ItemsControl并将其绑定到DataTables的集合。这适用于这种特殊情况,但是,我无法动态创建自定义列(例如,有一列只包含字符串值,另一列包含另一个组合框),我希望这样做。