2013-10-18 26 views
11

Aşağıdaki örnekten seçilen değeri (örn. Option1) string olarak nasıl alabilirim? Google'da pek çok öneri denedim ancak dizeyi alamıyorum.Wpf combobox seçili değeri alın

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> 

codebehind:

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

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

selectedValue ve test dizesini "System.Windows.Controls.ComboBoxItem: Seçim1" return Hem değil "Seçenek1 "

Bu gerçekten çok basit olmalı, ancak bu işe yaramıyor ya da neyin yanlış olduğunu göremiyorum?

cevap

12

Birleşik kutulardaki öğeleri el ile yerleştirmemelisiniz. Onları ItemsSource kullanarak ayarlayın.

Temel olarak, ItemsSource olarak sizin SelectedItem otomatik ComboboxItem sarma oluşturulmaz seçildiği tam seçeneği olacak bu şekilde onları seçenekleri (veya seçenekleri temsil nesneler) bir listesini oluşturmak ve ayarlamalısınız.

+2

Sizin burada gördüğüm tek akıl yanıtıdır. –

+0

ItemsSource kullanarak mükemmel çalışıyor, teşekkürler. – user3357963

+0

@ooo: Yardım ettiğine sevindim. İçeriğin ve sunumun ayrılmasını göz önünde bulundurarak 'ItemsSource' kullanmak iyi bir seçenektir. – Vlad

7

İçeriği comboboxItem almak için kodunuzu güncelleyin.

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

Kontrol etmek daha iyidir: if (((ComboBoxItem) myComboBox.SelectedItem) .Content! = Null). Çünkü bir öğe için IsSelected = "True" kullanırsanız, içerik başlatıldıktan sonra null olacaktır. – Sasha

18

Sen SelectedValuePath = "İçerik" belirlesin.

<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>