2011-07-27 6 views
0

Dans WPF, j'ai la référence à un DataGridCell et souhaite obtenir son contenu. Je l'habitude d'avoir cette cellule dans un DataGridTextColumn et pourrait obtenir au contenu comme celui-ci:Contenu WPF de la cellule de DataGridTemplateColumn

var text = cell.Content as TextBlock; 

Mais cela ne fonctionne pas plus puisque la cellule est dans un DataGridTemplateColumn, bien que je ne précise TextBlock comme DataTemplate pour cette colonne . Y a-t-il encore un moyen d'y arriver?

EDIT pour clarifier le problème. Le code suivant fonctionne comme prévu:

<!-- XAML --> 
<DataGridTextColumn Header="Autor" Width="*" Binding="{Binding Author}" /> 

//C# 
var block = _selectedCell.Content as TextBlock; 
var text = block.Text; //text contains the string that is also displayed by the grid in that call 

Si j'utilise cependant un TemplateColumn le code ne fonctionnera pas parce que le bloc sera nulle. Y at-il un moyen d'obtenir toujours au contenu des cellules (une chaîne dans mon cas)?

+0

J'ai trouvé une solution utilisable dans cette autre [question] [1] ici sur stackoverflow. [1]: http://stackoverflow.com/questions/7029324/grabbing-reference-to-element-inside-datagridtemplatecolumn –

+0

Beaucoup trop compliqué dans ce cas. Vous pouvez trouver votre chaîne dans '(_selectedCell.DataContext en tant que * cast au parent de Author *). Author'. – LPL

Répondre

0

Vous devriez pouvoir donner un TextBlock à l'intérieur du DataTemplate un nom, puis utiliser la propriété Text pour obtenir les données.

<DataTemplate> 
    <TextBlock Name="txtData" Text="{Binding}" /> 
</DataTemplate> 

var text = txtData.Text as string; 
+0

Merci, je vais tester ça demain. Mais il n'est pas immédiatement évident pour moi comment je viens de la cellule à txtData dans votre exemple. –

+0

'txtData' est juste un nom arbitraire que j'ai assigné au TextBlock. Vous pourriez l'appeler 'cell' si vous voulez. –

+0

Je l'ai compris. Ce que je veux dire est: J'ai la référence à un DataGridCell. Comment puis-je utiliser votre méthode pour accéder à son contenu? –

Questions connexes