Mit Hilfe einer ListView ist es einfach möglich, Daten aus einer Datenquelle darzustellen. Dazu ist lediglich die Eigenschaft View zu definieren. Durch die Angabe von GridViewColumn Elementen und dem dazugehörigen DisplayMemberBindings werden die Daten aus der zugewiesenen Datenquelle auch schon angezeigt.
<ListView ItemsSource="{Binding MyOpenTickets}" BorderThickness="0" Margin="4">
<ListView.View>
<GridView>
<GridViewColumn Header="Id"
DisplayMemberBinding="{Binding Id}"/>
<GridViewColumn Header="Name"
DisplayMemberBinding={Binding Name}/>
<GridViewColumn Header="Version"
DisplayMemberBinding="{Binding Version.Name}"/>
<GridViewColumn Header="Status"
DisplayMemberBinding="{Binding State}"/>
</GridView>
</ListView.View>
</ListView>
Eine Anforderung ist nun sehr oft, dass die angezeigten Daten in einem Detailfenster geöffnet werden sollen. Dazu muss – idealerweise – ein Command untergebracht werden. Dies kann durch die Angabe eines CellTemplates bewerkstelligt werden.
<ListView ItemsSource="{Binding MyOpenTickets}" BorderThickness="0" Margin="4">
<ListView.View>
<GridView>
<GridViewColumn Header="Id"
DisplayMemberBinding="{Binding Id}"/>
<GridViewColumn Header="Name"
CellTemplate="{StaticResource TicketClickableButton}"/>
<GridViewColumn Header="Version"
DisplayMemberBinding="{Binding Version.Name}"/>
<GridViewColumn Header="Status"
DisplayMemberBinding="{Binding State}"/>
</GridView>
</ListView.View>
</ListView>
In der zweiten GridViewColumn-Definition wird das CellTemplate definiert. Zu beachten ist an dieser Stelle, dass kein DisplayMemberBinding angegeben werden darf. Hier nun das verwendete Template:
<DataTemplate x:Key="TicketClickableButton">
<Button Command="{Binding OpenTicketCommand}"
Content="{Binding Name}"
Style="{StaticResource ProjectLinkButton}" />
</DataTemplate>
Das Template stellt eine einfache Schaltfläche dar, welche an einen Command gebunden ist. Zusätzlich wird an der Schaltfläche das Binding definiert.
Eine mögliche Umsetzung kann so aussehen: