2013-10-18 16 views
11

Wie bekomme ich den ausgewählten Wert (zB Option1) als string von meinem Beispiel unten. Ich habe viele Vorschläge auf Google ausprobiert, kann aber die Zeichenfolge nicht abrufen.Get wpf Combobox ausgewählten Wert

XAML:

<ComboBox x:Name="selectOption" Text="Select Option" 
       SelectionChanged="selectOption_SelectionChanged" 
       SelectedValue="{Binding VMselectedOption, Mode=TwoWay}" > 
    <ComboBoxItem Name="cbb1">Option1</ComboBoxItem> 
    <ComboBoxItem Name="cbb2">Option2</ComboBoxItem> 
    <ComboBoxItem Name="cbb3">Option3</ComboBoxItem> 
</ComboBox> 

Code-Behind:

private void selectOption_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var selectedValue = selectOption.SelectedValue; 
} 

//elsewhere in code 
var test = viewModel.VMselectedOption; 

Sowohl selectedValue und Test gibt die Zeichenfolge "System.Windows.Controls.ComboBoxItem: Option1" und nicht "Option1 "

Das sollte wirklich einfach sein, aber ich kann einfach nicht funktionieren oder sehen, was los ist?

Antwort

12

Sie sollten die Combobox-Elemente nicht manuell einfügen. Stellen Sie sie mithilfe von ItemsSource ein.

Grundsätzlich sollten Sie eine Liste von Optionen (oder Objekte, die Optionen) erstellen und sie als ItemsSource, auf diese Weise Ihre SelectedItem genau die Option sein wird, die ausgewählt wird, nicht die automatisch Einwickeln ComboboxItem erstellt.

+2

Ihre ist die einzige gesunde Antwort, die ich hier gesehen habe. –

+0

Es funktioniert perfekt mit ItemsSource, danke. – user3357963

+0

@ooo: froh, dass es geholfen hat. Die Verwendung von 'ItemsSource' ist eine gute Option, wenn man die Trennung von Inhalt und Präsentation berücksichtigt. – Vlad

7

Aktualisieren Sie Ihren Code, um den Inhalt von comboboxItem zu erhalten.

var selectedValue = ((ComboBoxItem)selectOption.SelectedItem).Content.ToString(); 
8
string Value=""; 
if(myComboBox.SelectedIndex>=0) 
    Value=((ComboBoxItem)myComboBox.SelectedItem).Content.ToString(); 
+0

Es ist besser zu überprüfen: if (((ComboBoxItem) myComboBox.SelectedItem) .Content! = Null). Wenn Sie für ein Element IsSelected = "True" verwenden, ist der Inhalt nach der Initialisierung null. – Sasha

18

Sie sollten SelectedValuePath = "Content" gesetzt.

<ComboBox x:Name="selectOption" Text="Select Option" 
       SelectionChanged="selectOption_SelectionChanged" 
       SelectedValue="{Binding VMselectedOption, Mode=TwoWay}" 
       SelectedValuePath="Content"> 
    <ComboBoxItem Name="cbb1">Option1</ComboBoxItem> 
    <ComboBoxItem Name="cbb2">Option2</ComboBoxItem> 
    <ComboBoxItem Name="cbb3">Option3</ComboBoxItem> 
</ComboBox> 
Verwandte Themen