Benutzer mit den meisten Antworten
SelectedValue binding ComboBox

Frage
-
Hallo Zusammen
Kann mir bitte jemand helfen. Ich versuche gerade per Code eine Combobox zu generieren bei der das SelectedValue auf eine Variable verweist, d.h. das Steuerelement Combobox besitz eine Tabelle als DataSource wobei die ID das Value und der Text (Spalte 2) den Content. Wenn jetzt nun eine Auswahl getätigt wird soll die ID bzw. das Value in einer Variable in einer anderen Klasse gespeichert werden.
Hier noch mein Code. Ich habe das Gefühl, der Ansatz stimmt schon mal :)
MainWindows.xaml.cs
// Klasse TitleList beinhaltet das DataTable var titlelist = new TitleList(); titlelist.GetTitles(); // Zuweisen der DataTable. Mit Title als Anzeigetext und ID als Value var Combobox=new Combobox(); combobox.ItemsSource = titlelist.tblTitleList.DefaultView; combobox.DisplayMemberPath = "Title"; combobox.SelectedValuePath = "ID"; // Binding erstellen. Das Value soll der Klasse title.ID zugewiesen werden
Title title=new Title(); combobox.SelectedValue = new Binding() { Source = title, Path = new PropertyPath("ID") };
Title.cs
public int ID { get; set; } public int _ID { get { return ID; } set { ID = Convert.ToInt32(value.ToString()); } }
Bin sehr dankbar für jede Hilfe.
Gruss Gezim95
Gezim
Antworten
-
Hi Gezim,
ich denke, Du suchst eine Lösung, wie nachfolgend dargestellt. Wichtig dabei ist das Setzen der Bindung. Ich habe auch alle Steuerelemente im Code hinzugefügt.using System.Data; using System.Windows; using System.Windows.Controls; using System.Windows.Data; namespace WpfApplication1 { /// <summary> /// Interaction logic for Window13.xaml /// </summary> public partial class Window13 : Window { public Window1() { InitializeComponent(); } StackPanel sp = new StackPanel(); ComboBox cb = new ComboBox(); Label lbl = new Label(); Title title = new Title(); private void Window_Loaded(object sender, RoutedEventArgs e) { this.Content = sp; sp.Children.Add(cb); // Klasse TitleList beinhaltet das DataTable var titlelist = new TitleList(); titlelist.GetTitles(); // Zuweisen der DataTable. Mit Title als Anzeigetext und ID als Value cb.ItemsSource = titlelist.tblTitleList.DefaultView; cb.DisplayMemberPath = "Title"; cb.SelectedValuePath = "ID"; //// Binding erstellen. Das Value soll der Klasse title.ID zugewiesen werden cb.SetBinding(ComboBox.SelectedValueProperty, new Binding() { Source = title, Path = new PropertyPath("ID"), Mode = BindingMode.OneWayToSource }); // Anzeige der Auswahl organisieren sp.Children.Add(lbl); lbl.SetBinding(Label.ContentProperty, new Binding() { Source = title, Path = new PropertyPath("ID") }); } } internal class TitleList { DataTable _dt = null; internal void GetTitles() { _dt = new DataTable(); _dt.Columns.Add("Title", typeof(string)); _dt.Columns.Add("ID", typeof(int)); for (int i = 1; i < 10; i++) { _dt.Rows.Add(string.Format("Zeile {0}", i), i); } } internal DataTable tblTitleList { get { return _dt; ; } } } public class Title { public int ID { get; set; } } }
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Peter Fleischer Dienstag, 2. Juni 2015 08:42
- Als Antwort markiert Gezim95 Dienstag, 2. Juni 2015 13:17
Alle Antworten
-
Hallo,
zunächst mal zu deiner ID-Eigenschaft. Das sollte so aussehen:
private int _ID; public int ID{ get{return _ID;} set{_ID = value;} }
Bei der Bindung musst du nun noch die Mode-Eigenschaft auf TwoWay oder OneWayToSource setzen, damit der Wert auch zurück geschrieben wird.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Tobias Scholze Dienstag, 2. Juni 2015 06:18
-
Hallo Koopakiller
Dank für die rasche Antwort. Ich habe mal den Vorschlag so umgesetzt, jedoch ohne Erfolg.
combobox.SelectedValue = new Binding() { Source = title, Path = new PropertyPath("ID"), Mode = BindingMode.OneWayToSource };
private int _ID
public int ID { get { return _ID; } set { _ID = value; } }Im Debugger besitzt die Variable den Wert 0.
Gezim
-
Hi Gezim,
ich denke, Du suchst eine Lösung, wie nachfolgend dargestellt. Wichtig dabei ist das Setzen der Bindung. Ich habe auch alle Steuerelemente im Code hinzugefügt.using System.Data; using System.Windows; using System.Windows.Controls; using System.Windows.Data; namespace WpfApplication1 { /// <summary> /// Interaction logic for Window13.xaml /// </summary> public partial class Window13 : Window { public Window1() { InitializeComponent(); } StackPanel sp = new StackPanel(); ComboBox cb = new ComboBox(); Label lbl = new Label(); Title title = new Title(); private void Window_Loaded(object sender, RoutedEventArgs e) { this.Content = sp; sp.Children.Add(cb); // Klasse TitleList beinhaltet das DataTable var titlelist = new TitleList(); titlelist.GetTitles(); // Zuweisen der DataTable. Mit Title als Anzeigetext und ID als Value cb.ItemsSource = titlelist.tblTitleList.DefaultView; cb.DisplayMemberPath = "Title"; cb.SelectedValuePath = "ID"; //// Binding erstellen. Das Value soll der Klasse title.ID zugewiesen werden cb.SetBinding(ComboBox.SelectedValueProperty, new Binding() { Source = title, Path = new PropertyPath("ID"), Mode = BindingMode.OneWayToSource }); // Anzeige der Auswahl organisieren sp.Children.Add(lbl); lbl.SetBinding(Label.ContentProperty, new Binding() { Source = title, Path = new PropertyPath("ID") }); } } internal class TitleList { DataTable _dt = null; internal void GetTitles() { _dt = new DataTable(); _dt.Columns.Add("Title", typeof(string)); _dt.Columns.Add("ID", typeof(int)); for (int i = 1; i < 10; i++) { _dt.Rows.Add(string.Format("Zeile {0}", i), i); } } internal DataTable tblTitleList { get { return _dt; ; } } } public class Title { public int ID { get; set; } } }
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Peter Fleischer Dienstag, 2. Juni 2015 08:42
- Als Antwort markiert Gezim95 Dienstag, 2. Juni 2015 13:17