2010-03-04 63 views
0

更改DataTemplate中TextBlock的财产我有一个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属性更改为某些东西我该怎么做?它总是显得空白。

回答

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

谢谢!我正在使用FrameworkElementFactory,但是我需要访问像TreeView.Items属性这样的属性,该属性不可用作依赖项属性。 – azamsharp 2010-03-04 20:21:37

+0

那么,FrameworkElementFactory是XAML解析器如何创建DataTemplates ...因此,如果您可以在XAML中执行此操作,则可以在代码中执行此操作。你究竟需要做什么,这不适合你? – 2010-03-05 16:25:00