Ho la seguente TextBox:TextBox non sempre aggiorna
<TextBox Text="{Binding SearchString,
UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
associato per la seguente proprietà:
private string _searchString;
public string SearchString
{
get
{
return _searchString;
}
set
{
value = Regex.Replace(value, "[^0-9]", string.Empty);
_searchString = value;
DoNotifyPropertyChanged("SearchString");
}
}
La classe eredita da una classe base che implementa INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void DoNotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
Tutto quello che voglio è un modo rapido e sporco per disabilitare caratteri non numerici per un intero-on la casella di testo (so che non è completa, solo per la dimostrazione). Non voglio una semplice notifica che ci sia un testo illegale o altro, voglio scartare immediatamente tutti i caratteri su input che non sono consentiti.
Tuttavia, il TextBox si comporta in modo strano. Posso ancora inserire qualsiasi testo che desidero, verrà visualizzato come inserito, ad es. "1AAA". Anche se la proprietà è stata correttamente ripulita su "1" in questo esempio, la casella di testo mostra ancora "1aaa". Solo quando inserisco una cifra effettiva che causerebbe la modifica di _searchString, aggiorna anche il testo visualizzato, ad esempio quando ho "1aaa2" verrà aggiornato correttamente a "12". Qual è il problema qui?
hai ragione. ma perché non funziona in questo modo? – user1064519
@ user1064519 L'interfaccia utente sa che il valore non è stato effettivamente modificato quando viene sollevata la notifica PropertyChange, quindi non si preoccupa di rivalutare l'associazione e aggiornare l'interfaccia utente. Vedere l'aggiornamento alla mia risposta :) – Rachel
Se ha funzionato in questo modo, si finirebbe con loop infiniti: digitando una chiave si cambierebbe la casella di testo, che imposta la proprietà, che genererebbe l'evento PropertyChanged, che aggiornerebbe l'associazione, che cambierebbe la casella di testo, che imposterà la proprietà ... e così via all'infinito. –