Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Problems with XamlReader generating DataTemplate

I'm trying to implement the code below in my WPF project in order to generate DataTemplates on the fly for a DataGrid with dynamic columns. I found the code on StackOverflow here

public DataTemplate Create(Type type)
{
  return (DataTemplate)XamlReader.Load(
          @"<DataTemplate
            xmlns=""http://schemas.microsoft.com/client/2007"">
            <" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
            </DataTemplate>"
   );
}

However, on the XamlReader.Load code, I get the error "cannot convert from 'string' to 'System.Xaml.XamlReader'.

I tried to get around this by changing the code to:

return (DataTemplate)XamlReader.Load(XmlReader.Create(

but I get errors about passing invalid characters in the string.

Also, I am unsure how to pass a TextBlock to this code. I imagined I would just create a TextBlock and pass it as the Type argument, but I get the error "cannot convert from 'System.Windows.Controls.TextBlock' to 'System.Type'

Any help appreciated.

like image 545
Caustix Avatar asked Aug 24 '11 05:08

Caustix


1 Answers

public DataTemplate Create(Type type)
{
    StringReader stringReader = new StringReader(
    @"<DataTemplate 
        xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> 
            <" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/> 
        </DataTemplate>");
    XmlReader xmlReader = XmlReader.Create(stringReader);
    return XamlReader.Load(xmlReader) as DataTemplate;
}

Call it like this

TextBlock textBlock = new TextBlock();
Create(textBlock.GetType());
like image 136
Fredrik Hedblad Avatar answered Sep 21 '22 11:09

Fredrik Hedblad