使用Silverlight DataGrid的动态列

时间:2010-01-26 21:47:06

标签: silverlight datagrid

我正在尝试将列添加到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!" });
});

1 个答案:

答案 0 :(得分:0)

我认为要求DataGrid在已经显示数据时动态创建新单元可能有点太多了。可能值得在UpdateLayout上调用DataGrid添加新列,以确定是否说服它重新布局单元格。