2012-11-14 13 views
12

は、私はいくつかのパネル上に2つのコントロールを持っているフォースIDataErrorInfo検証

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

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

私はコンボボックスの上に何かを選択すると、テキストボックスのためidataerrorinfo検証を強制する必要があります。どうやってするか?

の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; 
     } 
    } 

答えて

17

ちょうどあなたが検証するか、.NET 4.5またはSilverlightの4使用されている場合INotityDataErrorInfoプロパティのNotifyPropertyChangedイベントを発生させます。

+0

yea ... NotifyPropertyChanged works)前に試したことがありますが、双方向モードを忘れてしまいました... –

+0

ActiveStageViewModelより[AlsoNotifyFor( "ShapeName")]を使用しました – MartinaLabMath

+1

私の場合は'TabControl'を持っていて、最後のタブで初めてsaveをクリックすると' NotifyPropertyChanged'が発生し、エラーが表示されます。しかし、別のタブに戻って最後のタブに戻ってきたら、 'NotifyPropertyChanged'を呼び出すことはできません。エラーテンプレートは表示されません。どんな洞察? – JobaDiniz

13

また、NotifyPropertyChangedをString.Emptyプロパティで呼び出すことができます。これにより、そのレベルのすべてのプロパティの検証が強制されます。時には役立つことができます。

関連する問題