2010-09-01 7 views
0

J'ai une table utilisateur et j'ai une clé étrangère de cette table d'une table de livre. le FK est ProxyResponsibleUser_ID. quand j'utilise DataGridTextColumn dans mon DataGrid tout est OK mais maintenant je veux utiliser DataGridTemplateColumn pour afficher la colonne FullName de la table User pour l'utilisateur correspondant avec ProxyResponsibleUser_ID. J'obtiens une erreur car DataGridTemplateColumn n'a pas de propriété Binding. Par conséquent, par quelle propriété de DataGridTemplateColumn vais-je lier le ProxyResponsibleUser_ID? Merci d'avance.Liaison à DataGridTemplateColumn

<DataGridTextColumn x:Name="securityConfigurationNameColumn" Binding="{Binding Path=SecurityConfigurationName}" Header="Security Configuration Name" Width="*" /> 
<DataGridTemplateColumn x:Name="proxyResponsibleUser_IDColumn" Binding="{Binding Path=ProxyResponsibleUser_ID}" Header="Proxy Responsible User ID" Width="*" > 
       <DataGridTemplateColumn.CellEditingTemplate> 
        <DataTemplate DataType="{x:Type domain:User}"> 
         <TextBlock Text="{Binding FullName}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellEditingTemplate> 
      </DataGridTemplateColumn> 

Répondre

1

Je ne vois pas exactement ce que vous voulez faire, mais la liaison doit être fait au TextBlock exactement comme vous l'avez déjà fait. Par conséquent, la liaison dans le DataGridTemplateColumn-Tag est inutile. La colonne n'a pas besoin de connaître l'identifiant de l'enregistrement.

Si vous souhaitez que l'ID soit disponible pour le contrôle TextBox (généralement inutile car vous avez accès à cette propriété directement via DataContext), vous pouvez le faire par exemple en liant la propriété Tag. Par ailleurs, vous avez déclaré un TextBlock dans le EditTemplate. Peut-être que vous voulez un TextBox. Ou voulez-vous permettre à l'utilisateur de changer l'identifiant? Faites un commentaire si c'est le cas.

Espérons que cela aide.

+0

Normalement j'utilisais DataGridTextColumn pour afficher le FullName via la navigation de l'utilisateur par Entity FrameWork. Lorsque je change l'élément sélectionné d'une liste déroulante, je veux que la valeur de la grille de données soit mise à jour, mais quand je le fais, il y a eu des problèmes de mise à jour. Lorsque j'utilise directement le proxyResponsibleUser_ID, il est automatiquement mis à jour, mais dans la grille de données, les valeurs Id sont affichées à la place de Fullname. J'ai donc essayé un tel extrait de code. Merci pour votre aide, mais cela n'a pas fonctionné. Pouvez-vous suggérer une solution pour un tel problème? Merci encore .. – cemregoksu

+0

Non, je ne veux pas que quelqu'un modifie la colonne, je l'ai utilisé par erreur: p maintenant j'ai utilisé celltemplate – cemregoksu

+0

Semble à moi comme un problème EF (synchronisation entre la clé et la propriété de navigation). Mais je suis désolé, je n'ai aucune connaissance sur EF et ne peux donc pas vous aider dans ce cas. Toutefois, pour la question que vous avez écrite, DataGridTemplateColumn n'a pas besoin de connaître la liaison. Toute déclaration spécifique à la liaison est effectuée dans DataTemplate/s. J'essaierais de poser une question plus spécifique à EF pour obtenir une réponse plus valable que la mienne (ma réponse est uniquement spécifique à WPF). – HCL

2

Je me suis battue avec cette question pendant un bon moment, et après de nombreuses recherches infructueuses, j'ai trouvé un substitut acceptable.

Pour quelqu'un d'autre recherchant ceci: Essayez de créer une implémentation personnalisée de DataGridBoundColumn. Vous aurez seulement besoin de surcharger deux méthodes: GenerateElement et GenerateEditingElement.

Exemple:

protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) 
{ 
    Label element = new Label(); 
    element.SetBinding(Label.ContentProperty, Binding); 

    return element; 
} 

Utilisation:

<DataGrid> 
    <DataGrid.Columns> 
     <DataGridCustomColumn Binding="{Binding SomeProperty}" /> 
     <DataGridCustomColumn Binding="{Binding OtherProperty}" /> 
    </DataGrid.Columns> 
</DataGrid> 

Bien que je comptais utiliser à l'origine des modèles, j'ai choisi de créer des éléments dans le code-behind que mes besoins sont assez simples; cependant, je ne vois pas pourquoi cela ne pourrait pas être adapté pour fonctionner avec DataTemplates étant donné les enregistrements DependencyProperty appropriés.

Questions connexes