Imbriquée Silverlight Datagrid Rangée de Détails fonctionne très bien, mais je veux un bouton!
Je suis en utilisant silverlight 3 datagrid, et dans ce cadre, je suis à la nidification des enregistrements liés dans un autre contrôle à l'aide de la rowdetails (visibilitymode = visiblewhenselected).
J'aime vraiment la façon dont cela fonctionne, mais je préfère avoir l'affichage de la grille de la ligne de détails lors d'un "+" bouton est pressé, un peu comme un arbre se développer lorsque vous cliquez sur un nœud.
J'ai essayé par programmation la définition du modèle en utilisant les ressources comme ceci:
<Grid.Resources>
<DataTemplate x:Key="EmptyTemplate">
<StackPanel>
<!--<TextBlock Text="Empty Template!!!" />-->
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="SongTemplate">
<StackPanel>
<AdminControls:ArtistSongControl x:Name="ArtistSongControl" />
</Stack>
</DataTemplate>
</Grid.Resources>
Et dans la grille de l'LoadingRowDetails cas, je choisirais le modèle à définir par:
e.Row.DetailsTemplate = (DataTemplate)LayoutRoot.Resources["SongTemplate"];
Ce sortof travaillé, mais j'ai trouvé que j'avais des problèmes avec l'effondrement des lignes précédentes modèle de détails, et même écrasé ie8 (je ne sais pas si c'est lié).
En gros, j'aime vraiment la façon dont les silverlight 3 datagrid œuvres, et même la manière dont la rowdetailstemplate truc est mis en œuvre. Je voudrais simplement différer le chargement de tous les détails jusqu'à ce qu'une ligne est élargi intentionnellement (comme un arbre). L'ensemble de la 3ème partie de grilles semblent pour ce faire, et microsoft est tellement à l'étroit. Quelqu'un aurait-il une idée de comment résoudre ce problème?
Merci, Dennis
OriginalL'auteur Dennis Ward | 2009-08-07
Vous devez vous connecter pour publier un commentaire.
Dennis,
Dans le cas où vous ne l'avez pas déjà trouvé une réponse à cela, je voulais le même comportement et résolu par la personnalisation de la RowHeaderTemplate, qui vous permet de jeter un bouton dans l'en-tête pour chaque ligne. Ensuite, j'ai mis en place un gestionnaire pour le bouton comme ceci:
Noter que GetVisualAncestorOfType<> est une extension de la méthode que j'ai mis en œuvre pour creuser dans l'arborescence visuelle.
Vous devrez également définir la grille de données de HeadersVisibility propriété de Ligne ou de Tous les
OriginalL'auteur user101626
ici est une autre façon d'obtenir ce que vous essayez de faire:
Dans la grille de données mis en place un LoadingRow Événement comme celui-ci:
Dans la grille de création d'un Modèle de Colonne qui contiendra un Bouton comme suit:
Dans le LoadingRow Événement localiser le bouton qui est (dans ce cas) stockées dans la première colonne de la grille de données, puis de stocker le courant DataGridRow dans les boutons de la Balise de l'élément
Dans les Boutons EventHandler (dans ce cas ToggleRowDetailsVisibility) nous allons extraire la Ligne de sorte que nous pouvons basculer son DetailsVisibility
Vous remarquerez que "CurrentlyExpandedRow", c'est une variable Globale de type DataGridRow, que nous stockons les actuellement élargi ligne, cela nous permet de fermer la Ligne quand un nouveau est d'être ouvert.
Espère que cette aide.
OriginalL'auteur mknopf
En plus de la réponse uxrx fournie ici est le code pour trouver un ancêtre
OriginalL'auteur Nick
Pour cela:
Nous pouvons utiliser comme:
OriginalL'auteur Rabindra
Je vous suggère de prendre un coup d'oeil à la RowVisibilityChanged événement sur la grille de données, essentiellement lorsque la ligne de visibilité devient "Visible", puis de charger les informations de la ligne.
OriginalL'auteur Neil