2010-09-25 5 views
2

J'ai un contrôle Silverlight DataGrid à l'intérieur duquel j'ai une zone de texte et un contrôle de bouton.Comment puis-je accéder à la valeur de la zone de texte incorporée dans une grille Silverlight (3.0)?

Il est aussi sous

<dg:DataGrid x:Name="myGrid" AutoGenerateColumns="False"> 
    <dg:DataGrid.Columns> 

<dg:DataGridTemplateColumn Header="Name" Width="100"> 
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
     <TextBox Text="{Binding Name}" x:name="txtName"/> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 
    </dg:DataGridTemplateColumn> 

    <dg:DataGridTemplateColumn Header="Age" Width="100"> 
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
     <TextBox Text="{Binding Age}" x:name="txtAge"/> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 
    </dg:DataGridTemplateColumn> 

     <dg:DataGridTemplateColumn Header="Action" Width="100"> 
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
     <Button x:Name="btnCilck" Content="Click" Click="btnClick_Click /> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 
</dg:DataGridTemplateColumn> 

    </dg:DataGrid.Columns> 
</dg:DataGrid> 

Ce que je veux faire est que lors de l'exécution, je veux récupérer la valeur textbox (txtName) pour la ligne sélectionnée. Je veux dire, disons que la grille a 10 lignes (c'est-à-dire 10 zones de texte dans cette colonne particulière, disons le nom de la colonne) et 10 boutons dans la colonne Action (nommons-le comme ça). Maintenant, lorsque je clique sur le bouton 5ème rangs Cliquez sur le bouton, je veux obtenir la valeur de la zone de texte présente dans cette ligne.

Merci d'avance.

Répondre

7

Dans le gestionnaire d'événements click, vous pouvez examiner le DataContext de l'expéditeur (Button), qui sera l'élément représenté par cette ligne et aura les propriétés Name, Age etc .; vous pouvez obtenir la propriété liée à la zone de texte. Une meilleure conception, en supposant que vous ayez conçu votre application avec MVVM, consiste à avoir une ICommand dans ViewModel et à lier la propriété Command de Button à cette commande IC. Dans ce cas, vous pouvez lier quelque chose au CommandParameter du bouton et le recevoir dans le gestionnaire ICommand - soit le DataContext lui-même avec {Binding} ou la propriété réelle qui vous intéresse.

Éditer: désolé de continuer avec la commande liaisons, ils ne sont pas facilement disponibles dans SL3; Il y a des façons de le contourner, google si vous êtes intéressé. Le modèle de commande encapsulera mieux les actions dans votre application.

Il existe effectivement des moyens d'accéder au contenu réel des cellules de la grille, mais je ne le recommanderais pas, car cela entraînerait beaucoup de surcharge et serait fragile au cas où l'un des modèles changerait; il est préférable de travailler avec les données réelles et de laisser les contrôles pour faire leur travail grâce à des liaisons.

+1

+1 Pour le premier paragraphe, simple, direct et pragmatique. – AnthonyWJones

Questions connexes