2010-02-19 4 views
6

Come è possibile visualizzare gli avvisi utente in modo simile agli errori. L'unica differenza è che il controllo ad es. TextBox deve avere un modello di errore diverso e simile a Validation.HasError deve essere un Validation.HasWarning.Stili di errore e avviso separati WPF

In altre parole, non tutti i problemi di convalida sono "errori" (almeno nella nostra applicazione). Vogliamo indicare visivamente se qualcosa è un avvertimento o un errore.

risposta

3

A volte ho bisogno di quella via di mezzo. Come Command s che richiedono 3 valori da CanExecute anziché true o false.

Per quanto riguarda gli avvisi che funzionano come la convalida, non conosco tutti i pezzi che si dovrebbero mettere insieme, ma penso di sapere come si avvierebbe.

È necessario affidarsi alle proprietà associate e ai comportamenti collegati (proprietà associate che si iscrivono agli eventi sull'oggetto ed eseguono operazioni correlate a tali eventi quando si attivano). Potresti averne uno che gestisce una collezione di oggetti ValidationRule da utilizzare per determinare se un avviso è stato emesso o meno, proprio come fanno le proprietà Validation. Potresti averne uno chiamato HasWarning che viene impostato o annullato dalla convalida a cui è possibile fare riferimento in trigger stile/modello.

È possibile rendere la parte di visualizzazione di avviso del modello di ciascun controllo, oppure è possibile ripetere la simulazione Validation e disporre di una proprietà associata WarningTemplate che viene utilizzata per inserire le informazioni di avviso in un AdornerLayer.


Dal personalizzato ValidationRule oggetti restituire un oggetto ValidationResult in cui il ErrorContent è semplicemente un oggetto, e questo oggetto è esposto anche nelle ValidationError oggetti come ErrorContent, si può anche essere in grado di utilizzare la convalida normale, dopo tutto. È possibile utilizzare una classe come oggetto ErrorContent che ha una proprietà ErrorType di Avviso o Errore e associare quella allo ErrorTemplate.

Non sono sicuro che la presenza di ValidationError presenti impedisca alcune operazioni (come la pressione di un pulsante) che si desidera consentire, ma potrebbe essere creata una sorta di proxy sul ViewModel che giudica lo ErrorType.

+0

+1 per l'osservazione che "ErrorContent" è un oggetto, non una stringa. Questo è un modo molto semplice per realizzare questo. Basta creare una classe di messaggio con sottoclassi di errore, avvertenza e informazione e un 'DataTemplate' per ogni tipo. –