2015-10-06 95 views
0

我有一个包含下面的类的实例的列表:WPF组合框结合和的SelectedItem

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属性字符串。哪里不对?

+0

@Hopeless你应该写这个作为答案,因为它是真的。 –

+0

我错了,快速浏览一下XAML。看起来像'SelectedItem'是绑定错误的。它应该绑定到一个'Foo.InformationModel.Reference.ReferenceCodeTypeChar'类型的属性,在这种情况下你可以将它绑定到一个字符串属性。从'SelectedItem'到'SelectedProgramTypeCode'的方式,没有Converter,所以'ToString()'将在'SelectedItem'上被调用并解析为''Foo.InformationModel.Reference.ReferenceCodeTypeChar“',然后被设置为'SelectedProgramTypeCode '(所以你可以在'value'变量中看到它)。 – Hopeless

回答

-1

你应该在你的XAML已经使用SelectedValue代替SelectedItem

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