Die Übersicht in einer ListView behalten
Man sieht es leider immer noch häufig, dass der normale Anwender, mit den von uns Entwicklern erstellten Masken so manches mal ein wenig überfordert ist. Ein Grund für diese Überforderung ist ganz klar, die Masse an Informationen oder Eingabe Möglichkeiten, die wir versuchen in einer Maske unterzubringen (Sei es mit Absicht oder weil unser Auftraggeber es so verlangt). Ganz klar, Informationen die Vorhanden sind, sollte man auch anzeigen, aber muss es ZB. bei einem ListView immer so weit treiben, so das man der Horizontale Scroll Balken, schon fast nicht mehr sichtbar ist?
Ich denke nein!
Ich bin mittlerweile dazu übergegangen, die in einem default mäßig angezeigten Spalten zu minimieren. Ja ich höre so manch einen jetzt schon aufschreien, unsere Anwender brauchen alle Informationen in der ListView. Das stimmt, die Daten wäre ja auch sonst nicht erfasst worden und Ich sage, die Anwender brauchen auf keine einzige Information verzichten, denn diese Daten werde ja angezeigt, nur halt nicht zu Beginn, sondern erst dann wenn das betreffende Item Selektiert wurde.
<ListView>
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumnHeader Content="Vorname" />
</GridViewColumn>
<GridViewColumn>
<GridViewColumnHeader Content="Nachname" />
</GridViewColumn>
<GridViewColumn>
<GridViewColumnHeader Content="Strasse" />
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
In diesem kurzen XAML-Ausschnitt, sind zwei Spalten (PLZ, Telefonnummer) nicht vorhanden. Doch wie bekommt der Anwender nun, diese beiden Fehlenden Spalten angezeigt? Nein keine Sorge, weder über eine Message Box noch über einen weiteren Dialog oder Tooltip, dieses alle wäre zwar möglich, jedoch aufgrund der Gesundheit der Anwender sollte man dieses lieber lassen. Um die Daten anzuzeigen brauche ich nicht viel mehr als einen Style, das Property IsSelected und ein ControlTemplate.
<Window.Resources>
<ControlTemplate x:Key="detailTeamplate">
<UniformGrid Columns="2">
<Label>Vorname</Label>
<TextBlock Text="{Binding Path=Vorname}"/>
<Label>Nachname</Label>
<TextBlock Text="{Binding Path=Nachname}"/>
<Label>PLZ</Label>
<TextBlock Text="{Binding Path=PLZ}"/>
<Label>Ort</Label>
<TextBlock Text="{Binding Path=Ort}"/>
<Label>Telefonnummer</Label>
<TextBlock Text="{Binding Path=Telefonnummer}"/>
</UniformGrid>
</ControlTemplate>
</Window.Resources>
<Grid>
<ListView>
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Template" Value="{StaticResource detailTeamplate}" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumnHeader Content="Vorname" />
</GridViewColumn>
<GridViewColumn>
<GridViewColumnHeader Content="Nachname" />
</GridViewColumn>
<GridViewColumn>
<GridViewColumnHeader Content="Strasse" />
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
In diesem Bild kann man nun erkennen, was passiert wenn ein Item in der ListView Selektiert wird, und somit kann der Anwender, nun alle Daten solange bewundern wie das Item selektiert ist. Natürlich könnte man an dieser Stelle auch andere Controls im ControlTemplate verwenden.
Zb um dem Anwender die Möglichkeit zu geben, die Daten an dieser Stelle zu bearbeiten und natürlich auch wieder zu speichern.
Und zuguterletzt wieder an die Datenschützer: Diese Daten sind keine Realdaten sondern stammen aus einer von Microsoft erstellten Beispiel Datenbank. Ähnlichkeiten mit real existierenden Personen sind eher zufälliger Natur und nicht beabsichtigt.