2012-11-14 9 views
12

Ho due controlli su qualche pannello: TextBox e ComboBox:Forza IDataErrorInfo convalida

<TextBox Text="{Binding ShapeName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" /> 

<ComboBox SelectedItem="{Binding ActiveStageViewModel, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" /> 

ho bisogno di forzare IDataErrorInfo convalida per casella di testo, quando seleziono qualcosa sulla casella combinata. Come farlo?

Il codice da ViewModel:

string IDataErrorInfo.this[string propertyName] 
    { 
     get 
     { 
     var error = string.Empty; 

     if (propertyName == Expression.GetPropertyName(() => ActiveStageViewModel)) 
     { 
      // TODO: Add functionality to force ShapeName property validation 
      return error; 
     } 

     if (propertyName == Expression.GetPropertyName(() => ShapeName)) 
     { 
      error = ValidateShapeName(); 
     } 

     TooltipMessage = error; 
     return error; 
     } 
    } 

risposta

17

Basta alzare l'evento NotifyPropertyChanged per la proprietà che si desidera convalidare o se si è in .NET 4.5 o Silverlight 4 utilizzo del INotityDataErrorInfo.

+0

yea ... NotifyPropertyChanged lavori) ho provato prima, ma dimenticato circa due modalità modo ... –

+0

Ho usato [AlsoNotifyFor ("shapename")] nel corso ActiveStageViewModel – MartinaLabMath

+1

Funziona un pò ... Nel mio caso ho avere un 'TabControl' e nell'ultima scheda quando l'utente fa clic per la prima volta, si solleva' NotifyPropertyChanged' e viene visualizzato l'errore. Tuttavia, quando torno in un'altra scheda e torno di nuovo all'ultima scheda, sollevando 'NotifyPropertyChanged' non funziona, non viene mostrato alcun modello di errore. Qualche intuizione? – JobaDiniz

13

Vale la pena ricordare anche che è possibile aumentare NotifyPropertyChanged con String.Evty proprietà. Ciò forzerà la convalida di tutte le proprietà a quel livello. Può essere utile a volte.