【问题标题】:WPF combobox binding and SelectedItemWPF 组合框绑定和 SelectedItem
【发布时间】:2015-10-06 14:53:51
【问题描述】:

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

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 属性的预期字符串。怎么了?

【问题讨论】:

  • @Hopeless 你应该写这个作为答案,因为它是真的。
  • 好吧,我看错了 XAML。看起来SelectedItem 是错误的。它应该绑定到Foo.InformationModel.Reference.ReferenceCodeTypeChar 类型的属性,在这种情况下,您将它绑定到字符串属性。在从SelectedItemSelectedProgramTypeCode 的过程中,没有转换器,所以ToString() 将在SelectedItem 上调用并解析为"Foo.InformationModel.Reference.ReferenceCodeTypeChar",然后再设置为SelectedProgramTypeCode(所以你可以在value 中看到它)变量)。

标签: c# wpf xaml combobox


【解决方案1】:

您必须将SelectedItem SelectedValuePathSelectedValue 结合使用。

看到这个答案Difference between SelectedItem, SelectedValue and SelectedValuePath

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 2016-02-22
      • 1970-01-01
      • 2012-06-18
      • 2011-03-09
      相关资源
      最近更新 更多