【发布时间】: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类型的属性,在这种情况下,您将它绑定到字符串属性。在从SelectedItem到SelectedProgramTypeCode的过程中,没有转换器,所以ToString()将在SelectedItem上调用并解析为"Foo.InformationModel.Reference.ReferenceCodeTypeChar",然后再设置为SelectedProgramTypeCode(所以你可以在value中看到它)变量)。