2017-06-05 17 views
0

MVVMプログラムでプログラムを使用していて、いくつかのオブジェクトを含むビューがあります。その中にテキストを書き込むときにValidatesOnDataErrorsという値TextBoxがあります。IsEnabledプロパティがFalseの場合、ValidatesOnDataErrorsを無効にします。WPF

また、私はいくつかの条件によってViewModelで変更されたIsEnabledプロパティへのバインディングを持っています。

IsEnabledのバインディングプロパティがFalseのときに、ValidatesOnDataErrors(Falseにする)を取り除きたいのですが、どうすればできますか?

<StackPanel> 
    ..... 

    <TextBox Text="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" IsEnabled="{Binding isValueFieldEnable}"/> 

    ..... 

</StackPanel> 

ありがとうございます。

+0

'TextBox'スタイルの' DataTrigger'で、 'isValueFieldEnable'が' false'になったときに 'Text'バインディング全体を変更することができます。 – Maxim

+1

'isValueFieldEnable'がfalseの場合、単に' IDataErrorInfo'が "no error"を返します。 –

+0

@IlVicあなたは正しいです、私はそれを試みます。 – Orionlk

答えて

1

@Il Vicは、この検証ロジックをビューモデルクラスに実装する必要があることを示唆しています。

ビュー内のバインディングの属性を変更しないでください。代わりに、isValueFieldEnableプロパティがfalseを返すたびに、ビューモデルが常に有効な状態になっていることを確認し、データバインドされたValueプロパティのエラーを返しません。

ビューのバインドは常に同じです。 Valueプロパティが有効な値に設定されているかどうかを定義するのは、ビューモデルです。また、isValueFieldEnableが偽の場合、プロパティは常に有効であるとみなされます。それが検証ロジックです。そして、これはあなたのビューではなくあなたのビューモデルクラスで実装されるべきです。

関連する問題