我写了这个组合框
<ComboBox
x:Name="ComboBoxRole"
SelectedItem="{Binding ApplicationModel.CategoryName}"
ItemsSource="{Binding Categories}"
Style="{StaticResource ComboBoxStyle}" Text="Choose"
/>
此型号
public class CategotyModel : INotifyPropertyChanged, IDataErrorInfo
{
private string id;
private string name;
public string Id
{
get => id;
private set
{
id = value;
NotifyPropertyChanged("Id");
}
}
public string Name
{
get => name;
private set
{
name = value;
NotifyPropertyChanged("Name");
}
}
}
为Item来源创建此属性
public IList<CategotyModel> Categories
{
get
{
var categoriesDTO = _categoryManager.GetAllCategories();
this.categories = mapper.DefaultContext.Mapper.Map<IList<CategotyModel>>(categoriesDTO);
return categories;
}
}
它的工作很有趣,但是我不知道如何发送给组合仅1个参数,因为我使用"AppStore.WPF.MVVMLight.Models.CategotyModel"
对象。
注意:我从服务器获取结果。没关系。
(无需foreach IList<CategoryModel>
并写入字符串列表-我认为这是不好的方法)。
修改
<ComboBox
x:Name="ComboBoxRole"
SelectedItem="{Binding ApplicationModel.CategoryName}"
SelectedValuePath="Name"
DisplayMemberPath="Name"
ItemsSource="{Binding Categories}"
Style="{StaticResource ComboBoxStyle}"
Text="Choose"
/>
答案 0 :(得分:1)
您需要在ComboBox中修复一些问题:要显示项目的Name属性,请添加DisplayMemberPath="Name"
。要仅选择所选项目的name属性而不是整个对象,请添加SelectedValuePath="Name"
,然后将ApplicationModel.CategoryName
绑定到SelectedValue
而不是SelectedItem
。
即使使用SelectedItem
,SelectedValuePath
仍将是整个对象。
<ComboBox
x:Name="ComboBoxRole"
SelectedValue="{Binding ApplicationModel.CategoryName}"
SelectedValuePath="Name"
DisplayMemberPath="Name"
ItemsSource="{Binding Categories}"
Style="{StaticResource ComboBoxStyle}"
Text="Choose"
/>
答案 1 :(得分:0)
您想要DisplayMemberPath =“ Name”
<ComboBox
x:Name="ComboBoxRole"
DisplayMemberPath="Name"
SelectedItem="{Binding ApplicationModel.CategoryName}"
ItemsSource="{Binding Categories}"
Style="{StaticResource ComboBoxStyle}"
Text="Choose"/>