Fragensteller
ComboBox-Item dynamish hinzufügen???

Frage
-
Hallo,
wenn ich den Inhalt von dem ComboBoxItem direkt im ComboBox schreibe:
<ComboBox x:Name="combo" SelectedValuePath="Content" SelectedValue="{Binding Category, Mode=TwoWay}">
<ComboBoxItem>Eintrag_1</ComboBoxItem>
</ComboBox>
wird der Inhalt auch von einer bestimmte Methode gelesen aber wenn ich den Inhalt vom ComboBoxItem im Konstruktor der Formular über combo.Items.Add("Eintrag_1"); hinzufüge, wird der inhalt leider nicht mehr erkannt!
Woran kann es eigentlich liegen?
Grüße,
Nunui
Mittwoch, 12. Juni 2013 18:03
Alle Antworten
-
Hallo, die ComboBox aktzeptiert als Auswahlelemente alles, da die Auflistung in Object verlangt. Wenn du also mit der genannten Add-Methode ein Element hinzufügst, dann bekommst du beim ausfragen auch das hinzugefügte Objekt wieder. Wenn du aber ein ComboBoxItem hinzufügst, dann bekommst du auch das ComboBoxItem zurück:
public MainPage() { InitializeComponent(); cb.Items.Add("Item, im Codebehind erstellt"); cb.Items.Add(new ComboBoxItem() { Content = "ComboBoxItem, im Codebehind erstellt", }); Debug.WriteLine("Elemente in der ComboBox:"); foreach (object o in cb.Items) Debug.WriteLine(o.ToString()); }
<ComboBox Name="cb" HorizontalAlignment="Left" Margin="198,0,0,0" VerticalAlignment="Top" Width="120"> <ComboBoxItem Content="Itemn, im XAML erstellt"/> </ComboBox>
Wenn du an den Inhalt eines ComboBoxItems heran kommen möchtest musst du also die Content-Eigenschaft abfragen. Für normale Strings reicht ein ToString().
foreach (object o in cb.Items) if (o is ComboBoxItem) Debug.WriteLine((o as ComboBoxItem).Content.ToString()); else Debug.WriteLine(o.ToString());
Für den Fall das du andere Typen hinzufügen willst, brauchst du dann einen speziellen Parser, der das Objekt zurück verwandelt.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets | Twitter
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier.- Bearbeitet Tom Lambert (Koopakiller) Mittwoch, 12. Juni 2013 18:12 Code an Silverlight angepasst
Mittwoch, 12. Juni 2013 18:11 -
Was kommt denn für ein Fehler? Die Langform des Codes sieht so aus:
ComboBoxItem cbi = new ComboBoxItem();
Poste bitte mal den relavanten Code, also die Deklaration der CB, das hinzufügen der Elemente und das Ausfragen dieser.
cbi.Content = "Eintrag_1";
combo.Items.Add(cbi);<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets | Twitter
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier.Mittwoch, 12. Juni 2013 18:35 -
erstmal VIELEN DANK für die Mühe :)
Ich glaube aber zu wissen, woran es gelegen hat, dass es nicht funktionierte. Das ComboBox und andere Controls werden erstmal über InitializeComponent(); erzeugt und dann anschliessend die Items dem ComboBox hinzugefügt und daher beim Initialisieren können keine Inhalte durch Binding Category zugeordnet werden.
Ich habe das Ganze jetzt wie folgt gelöst, in dem ich das ausgewählte Item durch combo.SelectedValue.ToString(); an die Methode weiterreiche.
Grüße,
Nunui
Mittwoch, 12. Juni 2013 20:30