views:

347

answers:

2

I'm trying to add columns to a Silverlight DataGrid but having problems. In my View (I'm using Prism) I can add the columns in the constructor no problem, this works fine -

public MyView()
{
   InitializeComponent();
   myDatagrid.Columns.Add(new DataGridCheckBoxColumn() { Header = "HELLO!" });
}

However if I attempt to add a column when the DataContext is set the column is added (I can see Columns.Count increase when debugging) however the new column isn't rendered.

public IMyViewModel ViewModel
{
    get { return DataContext as IMyViewModel ; }
    set
    {
        DataContext = value;
        myDatagrid.Columns.Add(new DataGridCheckBoxColumn() { Header = "HELLO!" });
    }
}

Now, I know this does NOT respect the MVVM paradigm. This is not how I'm intending to write the code however I will need some crappy code like this in the View to set up the columns when the ItemSource that's bound to the DataGrid changes. You see the columns will grow and shrink depending on the user's input and I need to add / remove the columns and set bindings accordingly.

I have also tried the following thinking it was because it wasn't executing on the UI thread -

myDatagrid.Dispatcher.BeginInvoke(() =>
{
    myDatagrid.Columns.Add(new DataGridCheckBoxColumn() { Header = "HELLO!" });
});

Any help is really appreciated.

Thanks JestriK

A: 

I think its probably a bit much to ask of DataGrid to dynamically create new cells when its already displaying data. It might be worth calling UpdateLayout on the DataGrid having added the new column just to see if that convinces it re-layout the cells.

AnthonyWJones
I'm afraid that hasn't worked.I tried adding a button to the user control with a click event handler that executes the same line of code and it adds the column no bother.
JestriK
A: 

You may try to bind that using method described here

Andrey Shevtsov