2009-03-10 7 views
5

Se si dispone di un modulo dati, come faccio a sapere se un utente lo ha modificato (digitando il testo in una casella di testo o selezionando un elemento in una casella combinata)? Ho provato ad agganciarmi all'evento "TextChanged" della mia casella di testo, ma il problema è che, quando il mio modulo partecipa al database, l'evento "TextChanged" si attiva, contrassegnando prematuramente il mio modulo come "sporco".Come posso contrassegnare un modulo/campo come "sporco" se è un databound?

risposta

3

provare l'attuazione

public partial class Window1 : INotifyPropertyChanged 

e poi

public event PropertyChangedEventHandler PropertyChanged; 

public string UserName 
{ 
    get { return _UserName; } 
    set { if (value != _UserName) 
    { 
     _UserName = value; 
     OnNotifyPropertyChanged("UserName"); 
    }} 
} 

private void OnNotifyPropertyChanged(string property) 
{ 
    if (PropertyChanged != null) 
    PropertyChanged(this, new PropertyChangedEventArgs(property)); 
} 

e databind come

<TextBox Text="{Binding UserName}"/> 
+0

Miglioramento molto piccolo: è possibile ridurre il nesting eseguendo invece: if (value == _UserName) return; Abbassa un po 'il disordine visivo. –

0

Quando si visualizza per la prima volta la pagina, i valori del modulo vengono archiviati in una matrice, quando l'evento TextChanged viene attivato, confrontato con ciò che si è già ottenuto, se si tratta di una forma diversa.

1

La classe del modello implementa INotifyPropertyChanged? In tal caso, è possibile aggiungere un gestore per l'evento PropertyChanged sulla classe e osservare la modifica della proprietà in questione.

Se non è stato implementato INotifyPropertyChanged, potrebbe essere utilizzato anche il meccanismo che si sta utilizzando per notificare il livello di aggiornamento UI qui?

Problemi correlati