2010-03-04 6 views
0

J'ai un DataTemplate défini comme suit:Changement DataTemplate TextBlock propriété à l'exécution

J'accède au moment de l'exécution en utilisant le code ci-dessous:

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

Et maintenant, je veux changer la propriété textblock à quelque chose comment puis-je faire cela? Il semble toujours être vide.

Répondre

2

Un DataTemplate est un modèle pour créer le contenu. Lorsque vous appelez LoadContent sur le modèle, il crée le contenu défini par ce modèle. Par conséquent, lorsque vous apportez des modifications au TextBlock, il est uniquement appliqué à cette instance du contenu, et non au DataTemplate lui-même.

Je suppose que vous devez le faire pour générer une liaison basée sur une propriété transmise à la fonction. Vous pouvez le faire en générant le modèle directement dans le code. Il est beaucoup plus difficile à comprendre que XAML, mais cela devrait faire l'affaire:

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

     return new DataTemplate { VisualTree = factory }; 
    } 
+0

Merci! J'utilisais FrameworkElementFactory mais j'ai besoin d'accéder à des propriétés comme la propriété TreeView.Items qui n'est pas disponible en tant que propriété de dépendance. – azamsharp

+0

Eh bien, FrameworkElementFactory est la façon dont l'analyseur XAML crée les DataTemplates ... Donc, si vous pouvez le faire en XAML, vous pouvez le faire en code. Qu'est-ce que vous avez exactement besoin de faire pour que cela ne fonctionne pas pour vous? –

Questions connexes