2017-04-13 2 views
0

Ich versuche, eine ListBox zu verwenden, um einen Eintrag auszuwählen und dann ein Bild anzuzeigen, das zu diesem ausgewählten Eintrag gehört. Aber gerade am Anfang habe ich mein erstes Problem: Die ListBox mit Binding zu füllen funktioniert, aber wenn ich auf eine Zeile in meinem laufenden Programm klicke, wird die Zeile nicht ausgewählt. Ich kann nur den hervorgehobenen Hover-Effekt sehen, aber keine Linie auswählen. Irgendwelche Ideen, was mein Fehler sein könnte?Mit Binding gefüllte ListBox wählt Element nicht beim Klicken

Das ist mein XAML:

 <ListBox x:Name="entrySelection" ItemsSource="{Binding Path=entryItems}" HorizontalAlignment="Left" Height="335" Margin="428,349,0,0" VerticalAlignment="Top" Width="540" FontSize="24"/> 

Und in MainWindow.xaml.cs ich die List-Box mit Einträgen bin Füllung:

private void fillEntrySelectionListBox() 
    { 
     //Fill listBox with entries for active user 
     DataContext = this; 
     entryItems = new ObservableCollection<ComboBoxItem>(); 
     foreach (HistoryEntry h in activeUser.History) 
     { 
      var cbItem = new ComboBoxItem(); 
      cbItem.Content = h.toString(); 
      entryItems.Add(cbItem); 
     } 
     this.entrySelection.ItemsSource = entryItems; 
     labelEntrySelection.Text = "Einträge für: " + activeUser.Id; 

     //show image matching the selected entry 
     if (activeUser.History != null) 
     { 
      int index = entrySelection.SelectedIndex; 
      if (index != -1 && index < activeUser.History.Count) 
      { 
       this.entryImage.Source = activeUser.History[index].Image; 
      } 
     } 
    } 

So kann ich meine List-Box richtig gefüllt, sehen aber nicht Wählen Sie irgendwas - damit kann ich das Bild, das dem ausgewählten Eintrag entspricht, nicht laden. Ich bin noch recht neu in die Programmierung, so würde jede mögliche Hilfe groß sein :)


EDIT: Wenn jemand später einen Blick auf diesen Thread nimmt hier das ist - ganz offensichtlich ige Lösung

XAML jetzt sieht aus wie dieser hinter

<ListBox x:Name="entrySelection" ItemsSource="{Binding Path=entryItems}" HorizontalAlignment="Left" Height="335" Margin="428,349,0,0" VerticalAlignment="Top" Width="540" FontFamily="Siemens sans" FontSize="24"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Text}"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

-Code, es zu füllen:

//Fill listbox with entries for selected user 
DataContext = this; 
entryItems = new ObservableCollection<DataItem>(); 
foreach (HistoryEntry h in selectedUser.History) 
{ 
    var lbItem = new DataItem(h.toString()); 
    entryItems.Add(lbItem); 
} 
this.entrySelection.ItemsSource = entryItems; 
labelEntrySelection.Text = "Einträge für: " + selectedUser.Id; 

Und neue Klasse DataItem:

class DataItem 
{ 
    private String text; 

    public DataItem(String s) 
    { 
     text = s; 
    } 

    public String Text 
    { 
     get 
     { 
      return text; 
     } 
    } 
} 

Antwort

0

Du es mit ComboBoxItem Füllung, die nicht relevant für die List-Box ist, und auch falsch per Definition.

Sie müssen die ObservableCollection mit Datenelementen gefüllt haben.

Bedeutung, erstellen Sie eine Klasse, die die Daten enthält, die Sie speichern möchten, und die ListBox generiert automatisch ein ListBoxItem pro Datenelement.

http://www.wpf-tutorial.com/list-controls/listbox-control/

+0

Oh, vielen Dank für diesen Hinweis - das ist eine Kopie und Paste Fehler. Ich werde es versuchen :) – Denise

+0

ja, jetzt klappt es - mir geht's jetzt ziemlich blöd ^^ danke für die Hilfe :) – Denise

Verwandte Themen