ListBox Binding

  • WPF

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Thomas2705.

    ListBox Binding

    Einer ListBox sollen durch Binding die Namen der Laufwerke zugeordnet werden.

    XML-Quellcode

    1. <ListBox Name="ListBox1">
    2. <ListBox.ItemTemplate>
    3. <DataTemplate >
    4. <StackPanel Orientation="Horizontal" Margin="5">
    5. <TextBlock Text="{Binding Bezeichnung}"/>
    6. </StackPanel>
    7. </DataTemplate>
    8. </ListBox.ItemTemplate>
    9. </ListBox>


    VB.NET-Quellcode

    1. For Each Drive As IO.DriveInfo In IO.DriveInfo.GetDrives
    2. Dim ListBox1 = Me.ListBox1
    3. Dim Bezeichnung = (Drive.DriveType & " [" & Drive.VolumeLabel & "]")
    4. ListBox1.ItemsSource = Bezeichnung
    5. Next


    Ich bekomme des Laufwerksnamen nicht in den ListBoxItem. Wie geht das?
    Besser:

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. Title="MainWindow" Height="350" Width="525">
    5. <Grid DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}">
    6. <ListBox ItemsSource="{Binding Daten}">
    7. <ListBox.ItemTemplate>
    8. <DataTemplate>
    9. <TextBlock Text="{Binding}" />
    10. </DataTemplate>
    11. </ListBox.ItemTemplate>
    12. </ListBox>
    13. </Grid>
    14. </Window>


    VB.NET-Quellcode

    1. Class MainWindow
    2. Public Property Daten As New List(Of String)
    3. Public Sub New()
    4. ' Dieser Aufruf ist für den Designer erforderlich.
    5. InitializeComponent()
    6. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    7. For Each d In IO.DriveInfo.GetDrives()
    8. If d.IsReady Then
    9. Daten.Add(d.Name & " [" & d.VolumeLabel & "]")
    10. End If
    11. Next
    12. End Sub
    13. End Class

    Das DataContext-Attribut im XAML setzt den Datenkotext auf die aktuelle Instanz des Fensters. Darin gibt es die Property Daten, an die die ListBox ihre ItemsSource-Eigenschaft bindet. Im DataTemplate ist der Kontext nicht die ganze Liste, sondern ein Element daraus (ein String). Die Text-Property des TextBlocks soll das Element selbst sein, ausgezeichnet durch {Binding} ohne Path. Im Model wird unabhängig davon die Liste mit Inhalt gefüllt. Die Oberfläche bekommt das "gerade noch" mit, weil das im Konstruktor passiert. Spätere Modifikationen werden nicht erkannt - dafür braucht man eine ObservableCollection, eine DependencyProperty oder man implementiert INotifyPropertyChanged.
    Gruß
    hal2000

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „hal2000“ ()