Seraph_summer Ответов: 1

Как получить текст выбранного элемента через событие selectionchanged в combobox WPF?


Я хочу реализовать общую и простую функцию: в combox получить текст выбранного элемента через пользовательский выбор в ComboBox WPF, но я не смог найти способ сделать это даже после поиска в интернете. Невероятно. Надеюсь, кто-нибудь сможет мне помочь.

код XAML и c# выглядит следующим образом. Я дал комментарии и свой вопрос, а также код. Обратите внимание, что я пробовал аналогичные функции как в MainWindow (), так и в Selectionchanged event. Проблема возникает только в последней функции. Но мне нужно получить выбранный элемент, например "item1", когда я выбираю элемент combox в качестве первого элемента. Но это дает ошибку (см. ниже) при запуске отладки.

как ни странно, код XAML не может быть полностью скопирован сюда. однако вы должны предположить, что код xaml не имеет никаких проблем. она не является полной только из-за редактора здесь.

<ComboBox x:Name="ComBoxTest" Height="50" SelectionChanged="ComBoxTest_SelectionChanged" SelectedValuePath="Content">

        <ComboBoxItem IsSelected="True">item1</ComboBoxItem>

        <ComboBoxItem>item2</ComboBoxItem>

</ComboBox>



namespace WPFComboBoxTest
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        
 MessageBox.Show(ComBoxTest.SelectedItem.ToString());//System.Windows.Controls.ComboxItem:item1
 MessageBox.Show(ComBoxTest.SelectedValue.ToString());//item1 (OK)
string text = ((ComboBoxItem)ComBoxTest.SelectedItem).Content.ToString();//item1 (Ok, too)
            MessageBox.Show(text);
           
        }

        private void ComBoxTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            MessageBox.Show(ComBoxTest.SelectedItem.ToString());//System.Windows.Controls.ComboxItem, only, after starting the programm, no item1, which is selected by default i XAML code. But after starting programm, it shows System.Windows.Controls.ComboxItem:item1 when I select the first item
            MessageBox.Show(ComBoxTest.SelectedValue.ToString());//problem, when start debugging:  an unhandled exception of teyp 'System.Refection.TragetInvocationException' occured. I think this will work if I really hit the ComboBox and select one item. But I have no chance since this error occurs once starting the programm.
            string text = ((ComboBoxItem)ComBoxTest.SelectedItem).Content.ToString();//same problem
            MessageBox.Show(text);
            //my question: how to deal with this problem?
        }
    }
}


Что я уже пробовал:

пробовал разные способы, selecteditem, selectedvalue, items, ни один не работает.
поиск также в интернете, но он не увенчался успехом.

1 Ответов

Рейтинг:
1

Member 12599256

Удалите это из XAML :
SelectedValuePath= " Содержимое"

и исключение исчезло...


Seraph_summer

спасибо за ваш комментарий. К сожалению, то, что вы сказали, кажется неправильным. Проблема не зависит от того, существует SelectedValuePath= "Content" или нет.

Seraph_summer

вы можете легко попробовать его в WPF, потратив несколько минут.

[no name]

Я попробовал, прежде чем ответить на ваш вопрос. Если SelectedValuePath= "Content" существует, то ComboBoxTest.SelectedValue имеет значение null. Если вы удалите его, то ComboBoxTest.SelectedValue не будет равен null. Я использую VS2015 Update 2 с .NET 4.0 и Windows 10.

Seraph_summer

действительно, тогда здесь еще более странно. Я пробовал использовать как VS2015 community version на Win10, так и VS2013 express version на Win7. Это показывает ту же проблему.
Вы пробовали точно такой же код, как и мой?

Seraph_summer

Я нашел одно глупое решение следующим образом

строка[] textsplit = ComBoxTest.Элемент.ToString (). Split(':');
если (textsplit.Длина> 1)
Ящик для сообщений.Show (textsplit[1].Метод toString());

но я действительно хочу понять первопричину или механизм здесь. Может быть, это жучок? Я так не думаю.