动态添加数据网格到视图(MVVM)
本文关键字:视图 MVVM 网格 添加 数据 数据网 动态 | 更新日期: 2023-09-27 18:05:07
我正在尝试实现动态创建/删除数据网格。我想实现当某个属性发生变化时,从视图中添加或删除整个DataGrid。我的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"方法,但当属性被更改时,则不会创建任何内容。我做错了什么?
您的代码应该可以工作。检查PropertyChanged事件是否被触发(以及在事件触发之前是否调用了Test()方法)。
检查你的StackPanel的大小-第二个DataGrid可能添加,但不能显示,因为StackPanel是不够宽或高
像HighCore和其他人建议的那样,我最终使用ItemsControl并将其绑定到一个datatable集合。这在这种特殊情况下工作,但是,我不能动态地创建自定义列(例如,有一个列只包含字符串值和另一个组合框),我希望实现。