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附加属性将告诉您特定 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 回答