как получить содержимое выбранного элемента в поле со списком? - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь получить значение выделенного элемента в поле со списком, но вместо этого он возвращает «BakeShop.Category».

namespace BakeShop
{

class Oclist
{

    public ObservableCollection<Category> Categories { get; set; }
    public Oclist()
    {
        Categories = new ObservableCollection<Category>
        {
            new Category() { Name = "Dry Ingridients", Series = new ObservableCollection<string>()
            { "Flour", "Cake Flour", "Baking Soda" } },

            new Category() { Name = "Wet Ingridients", Series = new ObservableCollection<string>()
            { "Egg", "Coffee liqueur", "Vodka" } },

            new Category() { Name = "Chocolate", Series = new ObservableCollection<string>()
            { "Dark", "Light", "Crushed", "Chips"} }
        };
    }
}
public class Category
{
    public string Name { get; set; }
    public ObservableCollection<string> Series { get; set; }

XAML:

<ComboBox x:Name="CategoryCBox"
                      ItemsSource="{Binding Categories}"
                      DisplayMemberPath="Name"
                      MaxDropDownHeight="100"
                      Height="20" SelectedIndex="0"
                      FontSize="11"/>

<ComboBox x:Name="TypeCBox"
                      ItemsSource="{Binding SelectedItem.Series, ElementName=CategoryCBox}"
                      SelectionChanged="TypeCBox_SelectionChanged"
                      SelectedIndex="0"
                      Height="20"
                      FontSize="11"/>

и когда я делаю это

string Selected = CategoryCBox.SelectionBoxItem.ToString()
MessageBox.Show(Selected);

показывает "BakeShop.Category"

спасибо, ребята! :)

Ответы [ 3 ]

1 голос
/ 12 июня 2019

Вы можете получить Category из SelectedItem свойства ComboBox.

SelectedItem из ComboBox - это объект, поэтому вам нужно разобрать его в Category.

Пример:

  1. Category category = yourComboBox.SelectedItem as Category или
  2. Category category = (Category)yourComboBox.SelectedItem
0 голосов
/ 13 июня 2019

В ComboBox создайте привязку к выбранному элементу

<ComboBox x:Name="CategoryCBox"
                      ItemsSource="{Binding Categories}"
                      DisplayMemberPath="Name"
                      MaxDropDownHeight="100"
                      SelectedItem ="{Binding CategoryCBoxItem}"
                      Height="20" SelectedIndex="0"
                      FontSize="11"/>

Затем в вашей модели представления создайте свойство привязки

private string categoryCBoxItem;
public string CategoryCBoxItem
{
    get { return categoryCBoxItem; }
    set { SetProperty(ref categoryCBoxItem, value); }
}
0 голосов
/ 12 июня 2019

Вы используете DataBinding для установки ItemsSource в обоих ComboBox es, но затем используете событие SelectionChanged для получения данных из них.Я думаю, что правильным способом было бы использовать DataBinding для получения выбранных значений.

Ваш XAML будет выглядеть примерно так:

<ComboBox x:Name="CategoryCBox"
          ItemsSource="{Binding Categories}"
          DisplayMemberPath="Name"
          MaxDropDownHeight="100"
          Height="20" 
          SelectedItem="{Binding SelectedCategory}"
          FontSize="11"/>

<ComboBox x:Name="TypeCBox"
          ItemsSource="{Binding SelectedItem.Series, ElementName=CategoryCBox}"
          SelectedItem="{Binding SelectedSeries}"
          Height="20"
          FontSize="11"/>

Вам также необходимо добавить эти два свойства:SelectedCategory и SelectedSeries для Oclist класса.

public Category SelectedCategory { get; set; }

public string SelectedSeries { get; set; }

Подробнее о связывании данных в документах здесь

Также здесь есть превосходный blogpost в WPF ComboBox.

EDIT

Если вы просто хотите, чтобы ваш код работал, измените его на следующее:

string Selected = ((Category)CategoryCBox.SelectedItem).Name;
MessageBox.Show(Selected);

Но правильный путь - это правильный подход DataBinding.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...