get-the-solution

ListBox – SelectedItem Zusatzinformationen anzeigen

By
on Regards: .NET Framework; C#; XAML;

Manchmal ist es praktisch in einer ListBox beim SelectedItem zusätzlich noch mehr Informationen anzuzeigen.

Hier ein Beispiel:

    public class Class
    {
        public string Artikelname { get; set; }
        public string Foto { get; set; }
    }

Es soll nur die Property Artikelname in der ListBox angezeigt werden. Wurde ein Item "Selected" wäre es toll, wenn zusätzlich noch das Foto vom Artikel eingeblendet wird. Im DataTemplate habe ich zwei TextBlöcke die den Inhalt vom Artikelname und vom Foto anzeigen. Der TextBlock der das Foto representiert wird ausgeblendet. Erst wenn das Item "Selected" ist, soll der TextBlock eingeblendet werden. Das Problem im DataTemplate von der Class ist, dass wir im aktuellen DataContext nicht abfragen können, ob das aktuell gewählte Item Selected ist. Der DataContext enthält nämlich die Klasse Class (Zugegebenermaßen der Name ist nicht gut gewählt). Wir benötigen aber den DataContext vom ListBoxItem, da es dort eine Property für IsSelected gibt.

Über die RelativSource kann man auf das ListBoxItem zugreifen, und somit die Property IsSelected abfragen. Per DataTrigger schalten wir, dann die Visibility.

<DataTemplate DataType="{x:Type local:Class}">
            <StackPanel Orientation="Vertical" >
                <TextBlock Text="{Binding Artikelname}"></TextBlock>
                <TextBlock x:Name="Foto" Text="{Binding Foto}" Visibility="Collapsed"></TextBlock>
            </StackPanel>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True">
                    <Setter TargetName="Foto" Property="Visibility" Value="Visible"></Setter>
                </DataTrigger>
            </DataTemplate.Triggers>
</DataTemplate>

Das ging relativ einfach. Ein anderer Lösungsweg wäre, die Zusatzinformationen über den ItemTemplateSelector an zu zeigen. Wie man die Zusatzinformationen über den ItemTemplateSelector anzeigt wird hier erklärt.

http://www.developingfor.net/net/dynamically-switch-wpf-datatemplate.html