WPF组合框绑定和SelectedItem

本文关键字:SelectedItem 绑定 组合 WPF | 更新日期: 2023-09-27 18:16:28

我有一个包含以下类实例的列表:

namespace Foo.InformationModel.Reference
{
    public class ReferenceCodeTypeChar
    {
        public ReferenceCodeTypeChar();
        public string Category { get; set; }
        public string CodeValue { get; set; }
        public string Description { get; set; }
        public string Value { get; set; }
    }
}

下面是用于组合框所在窗口及其相关属性的DataContext的对象:

public class MyObject
{
    public List<Foo.InformationModel.Reference.ReferenceCodeTypeChar> ProgramTypes() {...}
    private string _selectedProgramTypeCode;
    public string SelectedProgramTypeCode
    {
        get
        {
            return _selectedProgramTypeCode;
        }
        set
        {
            if (_selectedProgramTypeCode != value)
            {
                _selectedProgramTypeCode = value;
                OnPropertyChanged("SelectedProgramTypeCode");
            }
        }
    }
}

下面是这个组合框的xaml代码:

<ComboBox ItemsSource="{Binding Path=ProgramTypes}"
          SelectedItem="{Binding Path=SelectedProgramTypeCode, Mode=TwoWay}"
          DisplayMemberPath="Description"
          SelectedValuePath="Value"/>

问题发生在SelectedProgramTypeCode内部。"value"变量的值是Foo.InformationModel.Reference.ReferenceCodeTypeChar,而不是ReferenceCodeTypeChar对象的value属性的预期字符串。怎么了?

WPF组合框绑定和SelectedItem

您必须将SelectedItem SelectedValuePathSelectedValue结合使用。

查看答案SelectedItem, SelectedValue和SelectedValuePath之间的差异

您应该在XAML中使用SelectedValue而不是SelectedItem

<ComboBox 
  ItemsSource="{Binding Path=ProgramTypes}"
  SelectedValue="{Binding Path=SelectedProgramTypeCode, Mode=TwoWay}"
  DisplayMemberPath="Description"
  SelectedValuePath="Value" />