tags:

views:

31

answers:

0

Hi,

In my silverlight application,I need to have dynamic columns in my DataGrid . So I had to create all the columns and their DataTemplate dynamically .When user wants to edit the column , a combo box will be displayed which has different values based on selected column.

For creating each column I have wrote :

 foreach (var itemFilter in ProductFilterCollection)
            {
                DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
                templateColumn.Header = itemFilter.Description.ToString();
                templateColumn.CellTemplate = CreateCellTemplate(typeof(TextBlock), itemFilter.Description.ToString());
                templateColumn.CellEditingTemplate = CreateEditingTemplate(typeof(ComboBox), itemFilter.Description.ToString()); 
                grdTest.Columns.Add(templateColumn);
            }

Here is the code for creating DataTemplate dynamically.

  public DataTemplate CreateCellTemplate(Type type, string strBinding)
    {
        return (DataTemplate)XamlReader.Load(@"<DataTemplate xmlns=""http://schemas.microsoft.com/client/2007""&gt; <" + type.Name + @" Text=""{Binding " + strBinding + @"}""/>  </DataTemplate>");
    }

    public DataTemplate CreateEditingTemplate(Type type, string strBinding)
    {
        return (DataTemplate)XamlReader.Load(@"<DataTemplate xmlns=""http://schemas.microsoft.com/client/2007""&gt; <" + type.Name + @" Loaded=""ddlTest_Loaded"" Tag=""{Binding " + strBinding + @"}""/>  </DataTemplate>");
    }

I need to use Loaded="ddlTest_Loaded" in CreateEditingTemplate() ,in order to load the combo box . However it causes exception . When I remove Loaded event it's fine however the combo box is empty. How can I load the combo box when I define it in DataTemplate codebehind.