当抛出异常或 Datasource 值为 null 时,Displaymember 设置为空字符串。
使用 .NET 代码反编译器,代码中有关于其工作原理的注释。我会试着解释一下。
在以下情况下可能会抛出异常:
- DataSourceChanged 上的应用程序代码
- 在数据被格式化以显示时的绑定期间
- 如果 DisplayMember 值在新数据源中无效。
该评论还提到实际的异常被“吞下”以防止破坏预期的行为。
我个人遇到了这种行为,因为没有抛出异常,所以很难弄清楚这些条件中的哪一个导致了重置。可能有更好的方法,但现在我在自定义控件中使用它。Datasource 属性在重置后设置 DisplayMember 时有效,所以我真的不确定它为什么会失败:
public new object DataSource
{
get { return base.DataSource; }
set
{
string displayMem = this.DisplayMember;
base.DataSource = value;
if (string.IsNullOrEmpty(this.DisplayMember) && string.IsNullOrEmpty(displayMem))
this.DisplayMember = displayMem;
DetermineDropDownWidth();
}
}