在运行时更改DataTemplate TextBlock属性

时间:2010-03-04 18:31:53

标签: wpf datatemplate

我有一个DataTemplate定义如下:

             

我在运行时使用以下代码访问它:

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

现在我想将textblock属性更改为我该怎么做?它似乎总是空白。

1 个答案:

答案 0 :(得分:2)

DataTemplate是用于创建内容的模板。在模板上调用LoadContent时,它会创建该模板定义的内容。因此,当您对TextBlock进行更改时,它仅应用于该内容的一个实例,而不应用于DataTemplate本身。

我假设您需要这样做以基于传递给函数的属性生成绑定。您可以通过直接在代码中生成模板来完成此操作。它比XAML更难理解,但这应该可以解决问题:

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

        return new DataTemplate { VisualTree = factory };
    }