10
votes

Comment accéder à programme à un contrôle de DataGrid Row Détails

J'ai un DataGrid avec des colonnes définies, puis un modèle de détails de ligne. Comment accéder à un contrôle dans le modèle Détails de la ligne dans le code de référence? J'ai un bouton que je veux activer / désactiver de manière programmable, mais je ne peux pas comprendre comment vous y accéder dans le code derrière. J'ai vu cela sur le MSDN:

http://msdn.microsoft.com/en-us/library/ bb613579.aspx

Mais cela vient de décrire un modèle de données régulier, alors quand j'ai essayé que cela n'a pas fonctionné. Mon cas est une gamme de données Détails de la ligne. Sûrement quelqu'un a écrit du code pour accéder à un contrôle dans un modèle de DataGrid Row Détails qui peut commenter sur ceci (seraient très appréciés).


0 commentaires

3 Réponses :


1
votes

Pouvez-vous définir (ou existe-t-il déjà) une propriété sur le type d'objet affichée dans la grille qui représente l'état activé du bouton? Si oui, il serait beaucoup plus simple de modifier le modèle de détail de ligne pour lier la propriété isenabled du bouton sur cette propriété.


1 commentaires

Oui, dans mon modèle de vue, je pourrais avoir une propriété dans la classe utilisée pour le DataGrid. Donc, c'est une façon de le faire. Et je viens de comprendre comment le faire dans le code derrière la classe aussi. Je posterai cela comme une réponse séparée. Merci pour votre réponse!



9
votes

D'accord, j'ai compris comment obtenir ce travail, je devais modifier le code qui est affiché dans cet article de MSDN dans la question initiale ....

DataGridRow row = (DataGridRow)(KeywordsGrid.ItemContainerGenerator.ContainerFromItem(KeywordsGrid.SelectedItem));

// Getting the ContentPresenter of the row details
DataGridDetailsPresenter presenter = FindVisualChild<DataGridDetailsPresenter>(row);

// Finding Remove button from the DataTemplate that is set on that ContentPresenter
DataTemplate template = presenter.ContentTemplate;
Button button = (Button)template.FindName("RemoveItemButton", presenter);


0 commentaires

2
votes

Utilisez l'événement DataGrid.LoaderRowowTails! C'est beaucoup plus simple.

J'ai trouvé cela ici: Comment Changer le texte de TextBlock qui est dans DaTatemplate de détails de ligne pour chaque Détails de ligne de DataGrid? p>

Exemple: P>

XAML P>

private void dgVehicles_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e)
{
    TextBlock tbTest = e.DetailsElement.FindName("Test") as TextBlock;
    if (tbTest != null)
    {
        tbTest.Text = "Juhuu";
    }
}


0 commentaires