0
votes

I have a DataTemplate defined as follows:

I am accessing it at runtime using the code below:

  else
                {
                    template = (DataTemplate)FindResource("GridViewTextBlockDataTemplate");

                    var textblock = (TextBlock) template.LoadContent();
                    textblock.Text = "bye";

                    //textblock.SetBinding(TextBlock.TextProperty, new Binding("[" + current.Key + "]"));
                }

                var column = new GridViewColumn
                                 {
                                     Header = current.Key,
                                     CellTemplate = template  
                                 };

                                gridView.Columns.Add(column);
            }

And now I want to change the textblock property to something how can I do that? It always appears to be blank.

1

1 Answers

2
votes

A DataTemplate is a template for creating the content. When calling LoadContent on the template, it creates the content defined by that template. Therefore, when you make changes to the TextBlock, it is only being applied to that one instance of the content, and not to the DataTemplate itself.

I'm assuming you need to do this to generate a binding based on a property passed in to the function. You can do this by generating the Template directly in code. It is a lot harder to understand than XAML, but this should do the trick:

    private DataTemplate GenerateTextBlockTemplate(string property)
    {
        FrameworkElementFactory factory = new FrameworkElementFactory(typeof(TextBlock));
        factory.SetBinding(TextBlock.TextProperty, new Binding(property));

        return new DataTemplate { VisualTree = factory };
    }