如何从对象发送到组合框1属性

时间:2019-06-06 16:09:39

标签: c# wpf mvvm

我写了这个组合框

<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"
    />

2 个答案:

答案 0 :(得分:1)

您需要在ComboBox中修复一些问题:要显示项目的Name属性,请添加DisplayMemberPath="Name"。要仅选择所选项目的name属性而不是整个对象,请添加SelectedValuePath="Name",然后将ApplicationModel.CategoryName绑定到SelectedValue而不是SelectedItem。 即使使用SelectedItemSelectedValuePath仍将是整个对象。

<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"/>