3

ウィンドウに次の Loaded イベントがあります。

void Window_Loaded(object sender, RoutedEventArgs e) {
    this.DataContext = new MyObject() {
        MyDateTime = DateTime.Now,
        MyNotEmptyString = "Not Empty",
        MyNotUpperCaseString = "not upper case",
        MyInteger = 20,
        MyIntegerInRange = 1,
        MyDouble = 4.56
    };
}

上記で初期化された各プロパティに対して、TextBoxそれにバインドする があり、それぞれに独自の検証ルールが関連付けられています。

問題は、私の検証ルールが初めて設定されたときに実行されていないことですが、フォームが通常どおりに使用されるとうまく機能します (フォームがフォーカスを失っthis.DataContextたときに実行されます)。TextBoxこの背後にある理由は何でしょうか? を設定してみUpdateSourceTrigger="PropertyChanged"ましたが、うまくいきませんでした。

編集:TextBoxプロパティにバインドされている a の例を次に示します。

<TextBox Name="MyDoubleField">
    <TextBox.Text>
        <Binding Path="MyDouble">
            <Binding.ValidationRules>
                <local:TextIsDouble/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>
4

3 に答える 3

3

「理由」の部分の答えは簡単です。これは設計によるものです。検証は通常、ユーザー入力に適用されます。保存されたデータを検証するためのものではありません。

根底にある質問は、コンテキストを設定した後に検証を手動でアクティブにする方法だと思います。よくわかりませんが、WPF ウィンドウに WinForms Validate() メソッドのようなものがあるのか​​もしれません。

于 2009-07-16T13:45:06.153 に答える
0

検証がデータ クラスにない理由はありますか? IDataErrorInfo を使用すると、データがすぐに検証され、追加の操作を行うことなく UI にバブルアップされます。

これは私たちにとってはうまくいくので、そうすべきだと言いますが、私たちは WPF を使用していません。

于 2009-07-16T14:36:01.203 に答える