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. –
Miglioramento molto piccolo: è possibile ridurre il nesting eseguendo invece: if (value == _UserName) return; Abbassa un po 'il disordine visivo. –