0

クイックグーグルでは、このための実行可能な複製は生成されません。WPFエラーテンプレートやUpdateSourceTriggerBindingのプロパティに関する非常に簡単な質問です。私は一種のWPFn00bなので、我慢してください。

コード自体(仕事関連)を投稿することはできませんが、基本的な考え方は次のとおりです。

同じグループにいくつかのラジオボタンの標準セットがあります。ラジオボタンの1つにTextBox.isEnabledデータバインドされているという意味で、それらの1つに「接続」されたテキストボックスがあります。rb.isChecked

テキストボックスは、PropertyChangedトリガーを使用してデータエラーを検証します。エラーが発生すると、それ自体の周りに赤いボックスが描画されます。

私が抱えている問題は、ラジオボタンでテキストボックスが有効になっている場合にのみ、「空のテキストボックス」がエラー状態になることです。他のラジオボタンを選択したときにエラーボックスが消える必要がありますが、そうではありません。

私の最初の考えは、エラーテンプレート内の何かをに結び付けようとする(HasError && IsEnabled)ことでしたが、それを行うための明確な方法がわかりません。

それに加えて、イベントでTextBox(via UpdateSourceTrigger)をトリガーすることも機能するかもしれないと思います。それを行う方法はありますか?FocusLostPropertyChanged

もちろん、別の解決策も歓迎します。

4

1 に答える 1

2

PropertyChangedが呼び出されるたびに、検証が再実行されます。これは、バインディングのPropertyChangedイベントを発生させることにより、再検証を強制できることを意味します。TextBox

がバインドされているプロパティのセッターで、がバインドされているプロパティに対して発生する可能性のあるRadioButton.IsChecked変更をいつ再検証する必要があるためです。PropertyChangedTextBoxRadioButton

例:

class MyViewModel
{
    public bool MyRadioButtonIsSelected
    {
       get { return myRadioButtonIsSelectedBacking; }
       set
       {
           myRadioButtonIsSelectedBacking= value;
           OnPropertyChanged("MyRadioButtonIsSelected");

           // Force revalidation of MyTextBoxValue
           OnPropertyChanged("MyTextBoxValue");
       }
    }

    public string MyTextBoxValue
    {
       get { return myTextBoxPropertyBackingField; }
       set
       {
           myTextBoxPropertyBackingField= value;
           OnPropertyChanged("MyTextBoxValue");
       }
    }
}

Xaml:

<RadioButton
    Content="My Radio Button"
    IsChecked="{Binding MyRadioButtonIsSelected}" />
<TextBox 
    IsEnabled="{Binding MyRadioButtonIsSelected}"
    Text="{Binding MyTextBoxValue, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
于 2012-10-18T15:12:47.823 に答える