In caso di lancio di un'eccezione o se il valore dell'origine dati è nullo, il Displaymember è impostato su una stringa vuota.
Utilizzo di un decompilatore di codice .NET, ci sono commenti nel codice su come funziona. Proverò a parafrasare.
Eccezioni possono essere gettati nei seguenti casi:
- codice di applicazione su DataSourceChanged
- Durante vincolante quando i dati vengono formattati per la visualizzazione
- Se il valore DisplayMember non è valido per la nuova Fonte di dati.
Il commento indica anche che l'effettiva eccezione è "ingoiata" per evitare di rompere il comportamento previsto.
Personalmente mi sono imbattuto in questo comportamento e poiché l'eccezione non è stata lanciata è difficile capire quale di queste condizioni ha causato il reset. Probabilmente c'è un modo migliore ma per ora lo sto usando nel mio controllo personalizzato. la proprietà DataSource è valida quando si imposta il DisplayMember dopo che è stato ripristinato, quindi non sono veramente sicuro di questo che è mancato:
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();
}
}
Così la sua come dovrebbe comportarsi, non è vero ??? –
Bene, "funziona come scritto" ;-p Ma viola alcuni tipici comportamenti di proprietà (cioè effetti collaterali imprevisti). –