Cuando se produce una excepción o si el valor de la fuente de datos es nulo, entonces Displaymember se establece en una cadena vacía.
Usando un descompilador de código .NET, hay comentarios en el código sobre cómo funciona esto. Intentaré parafrasear.
Las excepciones pueden ser lanzadas en las siguientes circunstancias:
- código de la aplicación en DataSourceChanged
- Durante vinculante cuando se formatea los datos para la visualización
- Si el valor DisplayMember no es válida en la nueva Fuente de datos.
El comentario también menciona que la excepción real es "deglutida" para evitar el incumplimiento del comportamiento esperado.
Personalmente encontré este comportamiento y, como no se lanza la excepción, es difícil determinar cuál de estas condiciones provocó el reinicio. Probablemente haya una mejor manera, pero por ahora estoy usando esto en mi control personalizado. La propiedad origen de datos es válido cuando se ajusta el DisplayMember después de que se haya restablecido por lo que realmente no estoy seguro de por qué está fallando:
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();
}
}
Por lo que su cómo debe comportarse, ¿no es así ??? –
Bueno, "funciona como está escrito" ;-p Pero infringe algunos comportamientos de propiedad típicos (es decir, efectos secundarios inesperados). –