La convalida utilizzando IDataErrorInfo
(Se questo è ciò che si sta utilizzando) si verificherà sull'oggetto associato alla Vista.
quindi se avete
<TextBox Text="{Binding Name}" />
questo sarà sul ViewModel. Tuttavia, se si espone il modello come proprietà sul modello di vista, la convalida verrà eseguita sul modello di dati.
<TextBox Text="{Binding Model.Name}" />
Con la prima scelta, è possibile associare alle proprietà vista del modello e percorso al modello di dati in cui esso contiene la convalida effettiva, poi basta implementare IDataErrorInfo
sul modello vista e percorso la validazione del modello
ViewModel:
public string this[string propname]
{
get { return _model[propname]; }
}
Questo è utile solo se effettivamente impostare le proprietà richieste del modello per la validazione di lavorare
ViewModel:
public string SomeProperty
{
get { reutrn _model.SomeProperty; }
set {
_model.OtherProperty = value;
RaisePropertyChanged("SomeProperty");
}
}
Comunque io preferisco la seconda opzione vincolante becasuse il problema con questo è che non è molto secco, così sarò quasi sempre esporre il DataModel come una proprietà sul modello vista (come quello è responsabile dei dati) e lascia il ViewModel a gestire il modello per la vista, che riguarda più come l'interfaccia utente interagisce con i dati.
In scenari molto complessi, potrebbe essere preferibile separare la convalida dal modello e dal modello di visualizzazione e fare in modo che sia il modello di visualizzazione sia il modello di dati lo consumino.