如何获取组合框中所选项目的内容?

时间:2019-06-12 16:10:08

标签: c# wpf xaml combobox binding

我试图获取组合框所选项目的值,但它返回此“ 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 个答案:

答案 0 :(得分:1)

您可以从Category的{​​{1}}属性中获得SelectedItem

ComboBox中的

SelectedItem是一个对象,因此您需要将其解析为ComboBox

示例:

  1. Category
  2. Category category = yourComboBox.SelectedItem as Category

答案 1 :(得分:0)

您正在使用DataBinding在两个ItemsSource上都设置ComboBox,但是随后使用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类中添加以下两个属性:SelectedSeriesOclist

public Category SelectedCategory { get; set; }

public string SelectedSeries { get; set; }

在文档here上了解有关DataBinding的更多信息

此外,这是WPF ComboBox上出色的blogpost

编辑

如果您只是想让代码正常工作,请将其更改为以下内容;

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

但是正确的方法是采用正确的DataBinding方法。

答案 2 :(得分:0)

在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); }
}