Entwickler-Ecke
WPF / Silverlight - Datenbindung ComboBox
Christoph1972 - Mi 10.11.10 18:05
Titel: Datenbindung ComboBox
Hallo Leute,
ich möchte eine ComboBox an eine ObservableCollection binden.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| class TypeList : ObservableCollection<string> { public TypeList() { Add("Type1"); Add("Type2"); Add("Type3"); } } |
Wenn ich es mit C# Code mache ist es ganz einfach:
C#-Quelltext
1:
| comboBoxType.ItemsSource = myTypeList |
Ich würde das Binding jedoch gerne mit XAML erledigen, das bekomme ich aber irgendwie nicht hin.
Was ist den hier nicht korrekt, bzw. was fehlt hier?
XML-Daten
1:
| <ComboBox ItemsSource="{Binding Source=myTypeList, Path=myTypeList}"........... |
Theoretisch sollte doch:
XML-Daten
1:
| <ComboBox ItemsSource="{Binding Source=myTypeList}"........... |
ausreichen.....
Trashkid2000 - Mi 10.11.10 19:28
Hallo,
Christoph1972 hat folgendes geschrieben : |
Theoretisch sollte doch:
XML-Daten 1:
| <ComboBox ItemsSource="{Binding Source=myTypeList}"........... |
ausreichen..... |
Also, was ich mit meinen (noch wenigen) XAML-Kenntnissen weiss: man kann nur an Properties binden.
Irgendwo musst Du also eine Propery haben, an die Du binden kannst:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| private TypeList typeList = null; public TypeList TypeList { get { if (typeList == null) typeList = new TypeList(); return typeList; } } |
Das ganze liegt bei mir in der Code-behind von Window1. Das Fenster hat bei mir den Namen "window1":
XML-Daten
1:
| <Window ... x:Name="window1"> |
So, wenn Du nun also die Property an die ComboBox binden willst, so sieht das also so aus:
XML-Daten
1:
| <ComboBox ItemsSource="{Binding Path=TypeList, ElementName=window1}"/> |
Hoffe, es hat Dir geholfen!
LG, Marko
Christoph1972 - Mi 10.11.10 21:49
Hi,
die Items werden nicht angezeigt. Der Debugger zeigt mir, das die Items in der Collection vorhanden sind.
Hier das Root Node
XML-Daten
1: 2: 3: 4:
| <Window x:Class="LHistory.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="Test" |
So sieht der Tag für die ComboBox aus:
XML-Daten
1:
| <ComboBox ItemsSource="{Binding ElementName=Test,Path=ThisTypeList}" ......... |
Hier die TypeList-Klasse
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| public class TypeList { public TypeList() { t.Add("Type1"); t.Add("Type2"); t.Add("Type3"); } private ObservableCollection<string> t = new ObservableCollection<string>(); public ObservableCollection<string> List { get { return t; } } } |
Diese instanziere ich dann via Property in MainWindow.xaml.cs//Hier zeigt mir der Debugger das die Collection Items enthält. Es muss also was mit dem Bindung faul sein.
C#-Quelltext
1: 2: 3: 4: 5:
| private TypeList t = new TypeList(); public TypeList ThisTypeList { get { return t; } } |
Kha - Mi 10.11.10 21:55
Du kannst Trashkid schlecht vorwerfen, dass du in der Zwischenzeit deinen Code geändert hast ;) ...
Quelltext
1:
| {Binding ElementName=Test,Path=ThisTypeList.List} |
PS: Stand kein Binding Error im Output-Fenster?
Christoph1972 - Do 11.11.10 00:38
Hi,
Vorwürfe wollte ich keine machen und habe ich auch nicht, oder? Ich habe meinen Code zwischenzeitlich verändert um zu einer Lösung zu kommen. Mir fehlte nur das .List, als ich es gesehen habe, habe ich Sch.... gedacht. Na ja, weiter gehts, aller Anfang ist schwer, oder wie war das?
Vielen Dank euch beiden für den Lösungsansatz!
[EDIT] Es stand kein Error im Output! Nicht mal wenn ich ein Object angebe das nicht exsistiert...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!