WPF验证未按预期工作

时间:2013-02-06 11:37:14

标签: c# wpf validation textbox wpf-controls

我想在WPF上有TextBox验证。我正在使用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。当我第一次加载我的窗口时,我的控件被一个红色正方形(验证一个)所包围,但我希望它只在我发射它时出现(在{{1 })。)。

2. 我怎么知道我的所有字段是否都已经过验证?我的意思是,当我按下按钮时,只需知道如何知道所有控件是否已经过验证

注意:我在构造函数中确实有这个上下文:

Explicit

2 个答案:

答案 0 :(得分:1)

  1. 您的第一个问题可能会被解答here您是否尝试将绑定模式设置为默认值?
  2. Validation.HasError附加属性将告诉您对特定UI元素的任何绑定是否存在任何绑定验证错误。在需要验证的每个控件上使用它。先尝试一下。如果您使用的是MVVM之类的模式,则可以在VM上创建属性以绑定到Validation.HasError属性。

答案 1 :(得分: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()方法....