情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

FrameworkElement.BindingValidationError イベント

2013/12/12

バインディング ソースによってデータ検証エラーが報告されたときに発生します。

Namespace:  System.Windows
アセンブリ:  System.Windows (System.Windows.dll 内)
XAML の XMLNS: xmlns にマップされていません。

public event EventHandler<ValidationErrorEventArgs> BindingValidationError
<frameworkElement BindingValidationError="eventhandler"/>

EventHandler<TEventArgs> に基づく、ValidationErrorEventArgs で制限されたハンドラーを使用して、このイベントを処理します。

BindingValidationError イベントはルーティング イベントです。これは、オブジェクト ツリーの親子関係によって関連付けられたオブジェクトのシーケンス用に複数の BindingValidationError イベント ハンドラーが登録されている場合、その親子関係の各オブジェクトによってイベントが受け取られることを意味します。イベントは、そのイベントを開始する入力条件を直接受け取るオブジェクトから発生し、一連の各親オブジェクトに通知 ("バブル") されます。"バブル" とは、イベントが下位のオブジェクトから始まり、オブジェクト ツリーを順に上っていくようすを表しています。ルーティング イベントの場合、イベント ハンドラーに使用できる sender は、イベントが処理されるオブジェクトを識別します。そのオブジェクトは、イベントを開始する入力条件を実際に受け取ったオブジェクトであるとは限りません。イベントを開始したオブジェクトを見つけるには、イベントの ValidationErrorEventArgs イベント データの OriginalSource 値を使用します。

BindingValidationError イベントのルーティングに使用される特定のシナリオでは、1 つの検証動作を実行するか、バインド入力を検証する個別のコントロールのグループを UI から入力するかを選択できます。これは、概念的には、一般的な Web ページ デザインに、HTML フォームですべての検証の問題を処理し、共通のフォーマットとユーザー インターフェイスの場所に各検証エラーを表示する単一コード パスが存在するしくみに似ています。共通の検証ルーチンと UI の場所を使用するこのデザインを選択した場合は、コントロール固有の BindingValidationError ハンドラーで Handledtrue に設定しないようにしてください。子オブジェクトで発生したイベントからの Handled が既に true の場合、グループの親は応答で独自のハンドラーを実行できなくなります。

通常、コントロール作成者は、コントロールのデザインとクラスの実装でこのイベントを発生させたり、イベントを処理したりしないようにする必要があります。代わりに、バインディング エンジンでは、コントロール インスタンスの使用状況から双方向のバインディングでソースを設定するときに、バインディング ソースによってスローされた例外を処理します。バインディングごとに、バインディングが適用されるプロパティを持つオブジェクトに対して、このような例外をエラーとして報告できます。この動作は、バインディングに NotifyOnValidationErrorValidatesOnExceptions の両方を true に設定すると有効になります。双方向のバインディングが無効なデータをソースにポストしようとしたときに、ソース setter 例外はオブジェクトから BindingValidationError を発生させます。

次の例では、検証 (BindingValidationError 処理がアタッチされている要素など) を使用した XAML UI と検証ハンドラー コードを示しています。BindingValidationError ハンドラーが、検証対象の個々のテキスト要素ではなく、StackPanel レベルでアタッチされている点に注目してください。この例では 1 つの要素しか検証されませんが、StackPanel レベルのハンドラーが複数の子要素に対して検証を実行することも考えられます。


<StackPanel BindingValidationError="StackPanel_BindingValidationError" >
    <StackPanel.Resources>
        <my:Bills x:Name="MyBills"/>
    </StackPanel.Resources>

    <TextBlock 
        TextWrapping="Wrap"
        Text="To generate a validation error, input a negative number or a non-number and then tap the button."
    />

    <TextBox x:Name="MyTextBox" Width="50" Margin="10">
        <TextBox.Text>
            <Binding Mode="TwoWay" Source="{StaticResource MyBills}" 
                 Path="Amount" NotifyOnValidationError="true" 
                 ValidatesOnExceptions="true"/>
        </TextBox.Text>
    </TextBox>
    <Button Content="Tap to Update"/>
</StackPanel>



private void StackPanel_BindingValidationError(object sender, 
    ValidationErrorEventArgs e)
{
    if (e.Action == ValidationErrorEventAction.Added)
    {
        MyTextBox.Background = new SolidColorBrush(Colors.Red);

    }
    else if (e.Action == ValidationErrorEventAction.Removed)
    {
        MyTextBox.Background = new SolidColorBrush(Colors.White);
    }
}


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: