我正在尝试将列添加到Silverlight DataGrid但遇到问题。在我的视图中(我使用Prism)我可以在构造函数中添加列没问题,这样可以正常工作 -
public MyView()
{
InitializeComponent();
myDatagrid.Columns.Add(new DataGridCheckBoxColumn() { Header = "HELLO!" });
}
但是,如果我在设置DataContext时尝试添加列,则会添加该列(我可以在调试时看到Columns.Count增加)但是不会渲染新列。
public IMyViewModel ViewModel
{
get { return DataContext as IMyViewModel ; }
set
{
DataContext = value;
myDatagrid.Columns.Add(new DataGridCheckBoxColumn() { Header = "HELLO!" });
}
}
现在,我知道这不尊重MVVM范例。这不是我打算编写代码的方式,但是当View绑定到DataGrid的ItemSource发生变化时,我需要在View中使用一些像这样的糟糕代码来设置列。您会看到列会根据用户的输入而增长和缩小,我需要添加/删除列并相应地设置绑定。
我也尝试过以下思路,因为它没有在UI线程上执行 -
myDatagrid.Dispatcher.BeginInvoke(() =>
{
myDatagrid.Columns.Add(new DataGridCheckBoxColumn() { Header = "HELLO!" });
});
答案 0 :(得分:0)
我认为要求DataGrid在已经显示数据时动态创建新单元可能有点太多了。可能值得在UpdateLayout
上调用DataGrid
添加新列,以确定是否说服它重新布局单元格。