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
.
fonte
2010-02-19 16:28:49
+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. –