Verschachtelte Silverlight Datagrid - Zeile-Details funktioniert Super, aber ich möchte eine Schaltfläche!
Ich bin mit einem silverlight 3 datagrid, und in der es, ich bin Schachteln Verwandte Datensätze in einem anderen Steuerelement mithilfe des rowdetails (visibilitymode = visiblewhenselected).
Ich mag wirklich, wie das funktioniert, aber ich würde viel lieber haben Sie die grid-Anzeige der Zeile details, wenn eine " + " - Taste gedrückt wird, wird stark wie ein Baum zu erweitern, wenn Sie auf einen Knoten klicken.
Ich habe versucht, programmgesteuert definieren Sie die Vorlage, indem Sie die Mittel wie diese:
<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>
Und in das raster LoadingRowDetails Ereignis, ich würde wählen Sie die Vorlage gesetzt von:
e.Row.DetailsTemplate = (DataTemplate)LayoutRoot.Resources["SongTemplate"];
Diese sortof gearbeitet, aber ich fand, dass ich hatte Probleme mit einstürzenden vorherigen Zeilen details-Vorlage, und sogar stürzte ie8 (nicht sicher, ob das zusammenhängt).
Grundsätzlich, ich mag wirklich, wie die silverlight 3 datagrid funktioniert, und auch, wie die rowdetailstemplate Zeug implementiert ist. Ich wäre einfach gerne aufschieben laden keine details, bis eine Zeile erweitert wird absichtlich (wie ein Baum sein würde). Alle 3rd-party-grids scheinen, um dies zu tun, und microsoft ist soooo nah. Hat jemand eine Idee wie man dieses Problem lösen?
Dank, Dennis
InformationsquelleAutor Dennis Ward | 2009-08-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dennis,
Falls Sie nicht bereits eine Antwort gefunden, ich wollte das gleiche Verhalten und es gelöst durch anpassen der RowHeaderTemplate, können Sie werfen eine Schaltfläche in der Kopfzeile für jede Zeile. Dann habe ich implementiert einen handler für die Schaltfläche wie folgt:
Beachten Sie, dass GetVisualAncestorOfType<> ist eine Erweiterung Methode, die ich eingeführt haben, um zu Graben, in die visuelle Struktur.
Werden Sie auch brauchen, um die datagrid-HeadersVisibility-Eigenschaft auf Zeile oder Alle
InformationsquelleAutor user101626
hier ist ein weiterer Weg, das zu erreichen, was Sie versuchen zu tun:
In der DataGrid-Einrichtung eines LoadingRow Veranstaltung wie dieser:
Im DataGrid eine Vorlage erstellen, die die Spalte enthält eine Schaltfläche, die wie die folgenden:
In der LoadingRow Event suchen Sie die Schaltfläche (in diesem Fall), gespeichert in der ersten Spalte des DataGrid, dann speichern Sie den aktuellen DataGridRow in die Tasten-Tag-element
In die Tasten-Event-Handler (in diesem Fall ToggleRowDetailsVisibility) extrahieren wir die Zeile, so dass wir wechseln können seine DetailsVisibility
Werden Sie feststellen, dass "CurrentlyExpandedRow", dies ist eine Globale variable vom Typ DataGridRow, dass wir das speichern des aktuellen Zeile erweitert, dies erlaubt uns zu schließen, dass die Zeile, wenn eine neue geöffnet werden soll.
Hoffe, das hilft.
InformationsquelleAutor mknopf
Zusätzlich zu der Antwort uxrx hier ist der code für die Suche nach einem Vorfahren
InformationsquelleAutor Nick
:
Können wir verwenden als:
InformationsquelleAutor Rabindra
Ich schlage vor, Sie nehmen einen Blick auf die RowVisibilityChanged Ereignis auf das datagrid, im Grunde, wenn die Zeile Sichtbarkeit von änderungen "Sichtbar", und laden Sie dann die Informationen für die Zeile.
InformationsquelleAutor Neil