Benutzer mit den meisten Antworten
Liste an Listbox binden

Frage
-
Hallo,
ich wollte nun die Abfrage der zuvor im Programm erstellten Filme in einer Listbox anzeigen.
Ich könnte einfach die Namen der Liste am Anfang als Items hinzufügen lassen, da man aber gleichzeitig die Liste offen, und ein Film hinzufügen kann, wollte ich die Listbox an die Liste binden, hier mein Verusch:
foreach(Film tempfilm in temprequest.filmlist) { Binding listbinding = new Binding("tempfilm"); listbinding.ElementName = "filmlistbox"; Filmlistbox.SetBinding(Filmlistbox.Items, listbinding); }
Dieser Code funktioniert nicht, was habe ich falsch gemacht?
LG
Antworten
-
Hallo,
wenn ich dich richtig stehe, möchtest du eine Liste von Objekten, in dienen Fall dein Film Objekt an eine Listbox binden. Korrekt?
Du versuchst aktuell alle deine Elemente zu binden. Das ist falsch. Du bindest deine Liste an deine ListBox. Dazu brauchst du einfach nur die ItemsSource Eigenschaft deiner Listbox auf die List setzen.
Filmlistbox.ItemsSource = temprequest.filmlist;
Lg Marco
- Als Antwort markiert R3turnz Dienstag, 8. September 2015 17:27
-
Hi,
Wenn Du die ganze Geschichte etwas eleganter lösen möchtest, kannst (und sollst) Du das Model View Viewmodel Pattern verwenden (MVVM):
1. Eine ViewModel Klasse erzeugen, welche die Filmliste als ObservableCollection anbietet:
public class MainViewModel { public MainViewModel() { //Filme laden und in Films einfügen Films = new ObservableCollection<Film>(); Films.Add(new Film() { Title = "Shrek" }); } public ObservableCollection<Film> Films { get; set; } }
Die ObservableCollection ist eine Erweiterung von List, welche für WPF angepasst ist. Sie sorgt dafür, dass die WPF automatisch mitbekommt, wenn sich die Collection ändert.
2. Im WindowLoaded Event das ViewModel instanzieren und als DataContext des Windows setzen:
private void Window_Loaded(object sender, RoutedEventArgs e) { this.DataContext = new MainViewModel(); }
3. In der View (MainWindow.xaml) per DataBinding auf die Films Property im ViewModel binden:
<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication2" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> <Grid> <ListBox Width="300" Height="300" ItemsSource="{Binding Films}" DisplayMemberPath="Title"/> </Grid> </Window>
4. Der WPF sagen, wie sie einen Film anzeigen soll. Dazu gibts 3 Möglichkeiten:
a) Die ToString() Methode der Klasse Film überschreiben und ausgeben, was Du im UI sehen willst
b) Den DisplayMemberPath in der ListBox auf die Property der Film Klasse setzen, die Du anzeigen willst.
c) Ein DataTemplate verwenden.
Zu MVVM gibts ein Haufen Literatur im Netz, Bsp:
https://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Getting-Started-with-MVVM
Grüsse Manuel
PS: Please mark as answer if helpful. Thanks!
Blog: http://www.manuelmeyer.net
Twitter: https://twitter.com/manumeyer1- Als Antwort markiert R3turnz Dienstag, 8. September 2015 17:27
Alle Antworten
-
Hallo,
wenn ich dich richtig stehe, möchtest du eine Liste von Objekten, in dienen Fall dein Film Objekt an eine Listbox binden. Korrekt?
Du versuchst aktuell alle deine Elemente zu binden. Das ist falsch. Du bindest deine Liste an deine ListBox. Dazu brauchst du einfach nur die ItemsSource Eigenschaft deiner Listbox auf die List setzen.
Filmlistbox.ItemsSource = temprequest.filmlist;
Lg Marco
- Als Antwort markiert R3turnz Dienstag, 8. September 2015 17:27
-
Hi,
Wenn Du die ganze Geschichte etwas eleganter lösen möchtest, kannst (und sollst) Du das Model View Viewmodel Pattern verwenden (MVVM):
1. Eine ViewModel Klasse erzeugen, welche die Filmliste als ObservableCollection anbietet:
public class MainViewModel { public MainViewModel() { //Filme laden und in Films einfügen Films = new ObservableCollection<Film>(); Films.Add(new Film() { Title = "Shrek" }); } public ObservableCollection<Film> Films { get; set; } }
Die ObservableCollection ist eine Erweiterung von List, welche für WPF angepasst ist. Sie sorgt dafür, dass die WPF automatisch mitbekommt, wenn sich die Collection ändert.
2. Im WindowLoaded Event das ViewModel instanzieren und als DataContext des Windows setzen:
private void Window_Loaded(object sender, RoutedEventArgs e) { this.DataContext = new MainViewModel(); }
3. In der View (MainWindow.xaml) per DataBinding auf die Films Property im ViewModel binden:
<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication2" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> <Grid> <ListBox Width="300" Height="300" ItemsSource="{Binding Films}" DisplayMemberPath="Title"/> </Grid> </Window>
4. Der WPF sagen, wie sie einen Film anzeigen soll. Dazu gibts 3 Möglichkeiten:
a) Die ToString() Methode der Klasse Film überschreiben und ausgeben, was Du im UI sehen willst
b) Den DisplayMemberPath in der ListBox auf die Property der Film Klasse setzen, die Du anzeigen willst.
c) Ein DataTemplate verwenden.
Zu MVVM gibts ein Haufen Literatur im Netz, Bsp:
https://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Getting-Started-with-MVVM
Grüsse Manuel
PS: Please mark as answer if helpful. Thanks!
Blog: http://www.manuelmeyer.net
Twitter: https://twitter.com/manumeyer1- Als Antwort markiert R3turnz Dienstag, 8. September 2015 17:27