开发者

Changing DataTemplate TextBlock Property at Runtime

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();
                    textbloc开发者_开发百科k.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.


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 };
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜