Esecuzione della convalida su un oggetto associato a dati dopo l'aggiornamento della proprietà

StackOverflow https://stackoverflow.com/questions/62686

Domanda

Ho un modulo di base con controlli associati a dati a un oggetto che implementa il file INotifyPropertyChanged interfaccia.Vorrei aggiungere qualche convalida a un paio di proprietà ma non voglio passare all'implementazione IDataErrorInfo per il bene di convalidare un paio di proprietà.

Ho creato le funzioni che eseguono la convalida e restituiscono il messaggio di errore (se applicabile) nell'oggetto.Quello che vorrei fare è chiamare queste funzioni dal mio modulo quando le proprietà rilevanti sull'oggetto sono cambiate e impostare il file ErrorProvider controllo nel mio modulo con eventuali messaggi di errore restituiti dalle funzioni di convalida.

Ho provato a collegare i gestori di eventi agli eventi Validating e LostFocus, ma questi sembrano attivarsi prima che il mio oggetto venga aggiornato e quindi non convalidano i dati corretti.È solo quando esco dalla casella di testo, rientro e poi esco di nuovo che la convalida viene eseguita rispetto ai dati corretti.

Esiste un altro evento a cui posso collegarmi in modo da poter chiamare queste funzioni di convalida dopo che la proprietà sul mio oggetto è stata aggiornata?Oppure è meglio semplicemente implementare il file IDataErrorInfo interfaccia?

È stato utile?

Soluzione

Non sono sicuro di quale sia esattamente il problema, stai dicendo che non è possibile impostare la proprietà finché il controllo non perde il focus?

In tal caso, è necessario impostare l'associazione per l'aggiornamento OnPropertyChanged invece di OnValidation.

Associazione a OnPropertyChanged significa che l'associazione viene aggiornata immediatamente, mentre OnValidation aggiorna l'oggetto sottostante solo quando viene attivata una convalida (che per la maggior parte dei controlli avviene quando perdono lo stato attivo).

Altri suggerimenti

Penso di aver trovato una soluzione al problema con l'aiuto del post di Cameron.Ho modificato l'associazione per aggiornare OnPropertyChanged e ora quando collego il gestore eventi all'evento LostFocus la convalida viene eseguita sul "nuovo" valore dalla casella di testo anziché su ciò che era precedentemente contenuto nell'oggetto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top