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
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}"/>
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.
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?
->http://www.mishainthecloud.com/2009/07/simple-dirty-tracking-for-winforms-in-c.html.
So che è un po 'tardi ma mi piace questo approccio :) Qualità incapsulata.
Dopo l'associazione dei controlli, chiamare SetAsClean(). Questa chiamata al metodo potrebbe probabilmente essere incapsulata nella stessa classe dirty-tracking gestendo alcuni degli eventi di BindingSources.
Non pensare che questo si applica a WPF. –
- 1. Doctrine: come contrassegnare il valore della colonna dell'oggetto come sporco?
- 2. Come contrassegnare un metodo obbligatorio?
- 3. Come posso contrassegnare un messaggio come letto in MailKit
- 4. È possibile contrassegnare un test come in sospeso in MiniTest?
- 5. Aggiornamento di un ComboBox databound
- 6. Come verificare se si utilizza il controllo sporco?
- 7. Come contrassegnare un metodo verrà generato incondizionatamente?
- 8. Come posso verificare se un valore è un numero?
- 9. Posso contrassegnare una funzione come deprecata?
- 10. Come resettare $ sporco in forma
- 11. Come contrassegnare un problema come risolto dal log di commit?
- 12. Come posso contrassegnare il codice Perl come deprecato?
- 13. Come contrassegnare un parametro di commutazione come obbligatorio in Powershell
- 14. Come contrassegnare come deprecato un singolo valore enum in Delphi
- 15. Come posso verificare se un repository è nudo?
- 16. Come posso verificare se un grafico diretto è aciclico?
- 17. Come posso verificare se un JSON è vuoto in NodeJS?
- 18. Come posso determinare se un metodo astratto è implementato?
- 19. Come posso rilevare se un iframe è stato caricato?
- 20. Come posso verificare se una stringa è un float?
- 21. Come posso verificare se un campo dell'editor CK è vuoto
- 22. Come posso determinare se un file è bloccato usando VBS?
- 23. Come posso verificare se un modulo PowerShell è installato?
- 24. Come posso verificare se un filehandle è aperto in Perl?
- 25. Come posso sapere se un "assemblaggio" è davvero cambiato?
- 26. Come posso determinare se un oggetto jQuery è differito?
- 27. Come posso verificare se un elemento non è definito?
- 28. Come posso verificare se un IP è attivo in java?
- 29. Come posso verificare se un array è nullo/vuoto?
- 30. Come posso sapere se un controllo Delphi è attualmente visibile?
Miglioramento molto piccolo: è possibile ridurre il nesting eseguendo invece: if (value == _UserName) return; Abbassa un po 'il disordine visivo. –