0

TextBox検証したいWPFがあります。私はBindingそれを検証するために使用しています:

<TextBox Text="{Binding Path=Name, UpdateSourceTrigger=Explicit}" TabIndex="0" LostFocus="TextBox_OnLostFocus">
</TextBox>

LostFocusイベント:

private void TextBox_OnLostFocus(object sender, RoutedEventArgs e)
{
    ((Control) sender).GetBindingExpression(TextBox.TextProperty);
}

検証の背後にあるコード:

public string Name
{
    get { return _name; }
    set
    {
        _name = value;
        this.OnPropertyChanged(new PropertyChangedEventArgs("Name"));

    }
}

public string Error { get { return this[null]; } }

public string this[string columnName]
{
    get
    {
        string result = string.Empty;
        columnName = columnName ?? string.Empty;
        if (columnName == string.Empty || columnName == "Name")
        {
            if (string.IsNullOrEmpty(this.Name))
            {
                result += Properties.Resources.ValidationName + Environment.NewLine;
            }
        }
        return result.TrimEnd();
    }
}

いくつか質問があります:

1.Explicit最初にウィンドウをロードしたとき、コントロールは赤い四角 (検証用) で囲まれていますが、(横に)起動したときにのみ表示されるようにしたいと考えています。

2.すべてのフィールドが検証されたかどうかを確認するにはどうすればよいですか? つまり、ボタンを押すと、すべてのコントロールが検証されているかどうかを知る方法を知るだけで済みます。

注:コンストラクターには次のコンテキストがあります。

User u = new User();
DataContext = u;
4

2 に答える 2

1
  1. あなたの最初の質問はここで答えられるかもしれませんあなたはバインディングモードをデフォルトに設定しようとしましたか?
  2. Validation.HasError Attachedプロパティは、特定のUI要素のバインディングにバインディング検証エラーがあるかどうかを示します。検証する必要があるすべてのコントロールでそれを使用します。最初にそれを試してください。MVVMのようなパターンを使用している場合は、VMにプロパティを作成して、Validation.HasErrorプロパティにバインドできます。
于 2013-02-06T13:03:50.677 に答える
0

実際、私の問題は、検証に使用したクラスに関係していました。クラスはこれを行います:

public ErrorProvider()
{
    this.DataContextChanged += new DependencyPropertyChangedEventHandler(ErrorProvider_DataContextChanged);
    this.Loaded += new RoutedEventHandler(ErrorProvider_Loaded);
}

したがって、最初に読み込まれるたびに、Loadイベントにサブスクライブしてから、これを起動します。

private void ErrorProvider_Loaded(object sender, RoutedEventArgs e)
{
    Validate();
}

だから私はそれをコメントし、Validate()必要に応じてメソッドを起動しました....

于 2013-02-08T11:37:53.597 に答える