ne peut pas trouver le Nom de DataGridColumn par programmation
J'ai trouvé les Colonnes de la collection dans mon datagrid, et a été l'espoir d'itérer à travers elle à trouver un certain Nom de la colonne. Cependant, je ne peux pas comprendre comment l'adresse de x:Nom de l'attribut de la colonne. Ce xaml illustre mon problème avec un DataGridTextColumn et un DataGridTemplateColumn:
<t:DataGrid x:Name="dgEmployees" ItemsSource="{Binding Employees}"
AutoGenerateColumns="false" Height="300" >
<t:DataGrid.Columns>
<t:DataGridTextColumn x:Name="FirstName" Header="FirstName"
Binding="{Binding FirstName}" />
<t:DataGridTemplateColumn x:Name="LastName" Header="LastName" >
<t:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding LastName}" />
</DataTemplate>
</t:DataGridTemplateColumn.CellTemplate>
</t:DataGridTemplateColumn>
</t:DataGrid.Columns>
</t:DataGrid>
Et voici mon code:
DataGrid dg = this.dgEmployees;
foreach (var column in dg.Columns)
{
System.Console.WriteLine("name: " + (string)column.GetValue(NameProperty));
}
Au moment de l'exécution, aucune valeur n'est présente; la colonne.GetValue ne retourne rien. À l'aide de Snoop, j'ai confirmé qu'il n'y a pas de Nom bien sur DataGridTextColumn ou DataGridTemplateColumn.
Ce qui me manque?
OriginalL'auteur Daniel R | 2011-01-03
Vous devez vous connecter pour publier un commentaire.
WPF a deux différents, mais des concepts similaires, x:Nom, qui est utilisé pour créer un champ qui fait référence à un élément défini dans le code XAML, c'est à dire de la connexion de votre code-behind pour votre XAML, et FrameworkElement.Nom, unique, qui les noms d'un élément à l'intérieur d'une portée de nom.
Si un élément a un FrameworkElement.Nom de la propriété, x:Nom de définir cette propriété à la valeur donnée dans le code XAML. Cependant, il existe des cas où il est utile de lien non FrameworkElement éléments de champs dans le code-behind, comme dans votre exemple.
Voir cette question connexe:
Dans WPF, quelles sont les différences entre le x:Nom et les attributs de Nom?
Comme alternative, vous pouvez définir votre propre attaché à la propriété qui peut être utilisé pour nommer les colonnes. La propriété attachée est définie comme suit:
Vous pouvez ensuite assigner un nom à chaque colonne ...
Puis accéder à ce nom dans le code comme suit:
Espère que ça aide
Daniel, comment sur une propriété attachée? Voir mon édité réponse ci-dessus.
Colin, qui a fonctionné pour moi. Je vous remercie. Je me demande pourquoi ils ne font pas un " Nom " DP pour fonction des colonnes datagridcolumn.
thnaks pour votre réponse,comment puis-je utiliser cette propriété dans le code-behind?par exemple je veux mettre le nom de la propriété pour cela, colonnes:
columnCollection = new ObservableCollection<DataGridTextColumn>(); columnCollection.Add(new DataGridTextColumn { Header = "ColumnHeader", Binding = new Binding("ColumnName)" , ??Name=????});
C'est de la pure magie. +1 pour vous!
OriginalL'auteur ColinE
Vous pouvez utiliser la requête linq pour trouver le nom de la grille de données en-Têtes de colonne
où dgvReports est le nom de la grille de données.
OriginalL'auteur Joee