【发布时间】:2011-04-16 17:04:42
【问题描述】:
我的 XAML 中有这个非常简单的组合框:
<ComboBox Name="cmb1" Width="200" Height="23" ItemsSource="{Binding}" />
这是我的代码:
public class Test //: System.Windows.DependencyObject
{
public string Name { get; set; }
public override string ToString() { return Name; }
}
public MainWindow()
{
InitializeComponent();
var col = new ObservableCollection<Test>();
cmb1.DataContext = col;
col.Add(new Test { Name = "A" });
col.Add(new Test { Name = "B" });
col.Add(new Test { Name = "C" });
col.Add(new Test { Name = "D" });
}
只要 Test 类不是从 DependencyObject 继承的,一切都很好。但是当它被继承时,ComboBox 在未展开时不显示当前项。
当我单击 ComboBox 并查看其下拉框时,当前项目被选中。
【问题讨论】:
-
我发现如果我将 DisplayMemberPath="Name" 添加到 ComboBox,它会正常工作。现在,问题是为什么 DependencyObject(或 ComboBox)不使用 ToString() 方法并期望显示成员路径?
-
将测试更改为标签(或其他一些选择的“依赖对象”)它工作正常。这是什么意思?