我试图获取组合框所选项目的值,但它返回此“ 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”
谢谢大家! :)
答案 0 :(得分:1)
您可以从Category
的{{1}}属性中获得SelectedItem
。
ComboBox
中的 SelectedItem
是一个对象,因此您需要将其解析为ComboBox
。
示例:
Category
或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
类中添加以下两个属性:SelectedSeries
和Oclist
。
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); }
}