WPF验证:清除所有验证错误

PaN*_*1Me 8 validation wpf clear

我有一个WPF UserControl,其中有许多其他控件.TextBoxes就是其中之一.每个TextBox都有自己的验证:

<TextBox>
    <TextBox.Text>
        <Binding Path="MyPath" StringFormat="{}{0:N}" NotifyOnValidationError="True">
            <Binding.ValidationRules>
                <r:MyValidationRule ValidationType="decimal" />
            </Binding.ValidationRules>
        </Binding>
    <TextBox.Text>
<TextBox>
Run Code Online (Sandbox Code Playgroud)

一个

现在假设用户在其中键入了一些无效字符.它们都会变成红色.

现在我想重置所有验证错误(由不正确的输入),并设定近期的正确值来自何处DataContext.

我在构造函数中设置了DataContext,我不想更改它(DataContext = null对我没有帮助):

DataContext = _myDataContext = new MyDataContext(..);
Run Code Online (Sandbox Code Playgroud)

我已经找到的是这些课程:

Validation.ClearInvalid(..)
BindingExpression.UpdateTarget();
Run Code Online (Sandbox Code Playgroud)

我认为这些课程可以帮助我,但是他们需要Binding一个具体的课程FrameworkElement,我想为所有这些课程全球化.

我是否应该遍历Visual Tree(这实际上是我不喜欢的)或者有更好的解决方案吗?

hba*_*rck 4

这就是 BindingGroup 的用途...您可以在所有控件的容器(例如包含它们的面板)上设置 BindingGroup。这将导致对 DataContext 的更新被保留,直到您对 BindingGroup 调用 UpdateSources。如果要重置用户的输入,则可以调用 CancelEdit,BindingGroup 会将容器内的所有控件重置为 DataContext 的(仍然不变)值。