2010-11-07 9 views
7

Sto utilizzando WPF con il pattern MVVM e sto avviando un progetto molto grande.Come utilizzare le regole di convalida del modello in WPF ViewModel

Per mantenere separate le preoccupazioni, voglio inserire tutte le regole di convalida nei miei modelli di dati.

Ma quando ripasso come eseguire la convalida WPF, tutti gli esempi che riesco a trovare mostrano come farlo con ViewModel che contiene le regole di convalida. Alcuni di questi esempi mostrano una profonda comprensione del WPF e sono molto interessanti.

In questa particolare app, ho un mapping 1: 1 tra i ViewModels che modificano e modellano, quindi potrei inserirlo in ViewModels. Ma non sembra giusto.

risposta

3

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.

Problemi correlati