Silverlight 4.0 TextBox数据字段始终更新使用验证失败的文本框更改的文本的源绑定

Silverlight 4.0 TextBox数据字段始终更新使用验证失败的文本框更改的文本的源绑定,silverlight-4.0,silverlight-toolkit,Silverlight 4.0,Silverlight Toolkit,我有一个文本框,在输入端有一个双向绑定。它的设置是,如果它为空,则验证失败,并显示工具提示,说明它不能为空。我的问题是,因为验证失败,所以每次文本框更改时(即每次按键),它都会尝试更新绑定。我不希望它每次按键都更新源代码。我在Silverlight 4.0 DataField.cs工具包中将其缩小为以下代码: private void OnTextBoxTextChanged(object sender, TextChangedEventArgs e) { TextBox textBox

我有一个文本框,在输入端有一个双向绑定。它的设置是,如果它为空,则验证失败,并显示工具提示,说明它不能为空。我的问题是,因为验证失败,所以每次文本框更改时(即每次按键),它都会尝试更新绑定。我不希望它每次按键都更新源代码。我在Silverlight 4.0 DataField.cs工具包中将其缩小为以下代码:

private void OnTextBoxTextChanged(object sender, TextChangedEventArgs e)
{
    TextBox textBox = sender as TextBox;

    if (textBox != null && (ValidationUtil.ElementHasErrors(textBox) || !this._lostFocusFired[textBox]))
        {
            this._lostFocusFired[textBox] = false;
            ValidationUtil.UpdateSourceOnElementBindings(textBox);
        }
}

由于元素有错误,它将落入ValidationUtil.UpdateSourceElementBindings()中。有没有我可以阻止它这样做?

我认为您需要帮助重新安排您的条件,以便更准确地表达您的意图,但我不清楚现有代码的结果会是什么。这就是为什么我们要求一个完整的、可运行的(但最小的!)测试用例。但是,如果您只是因为验证失败而不想进行更新,则应该这样做:

private void OnTextBoxTextChanged(object sender, TextChangedEventArgs e)
{
    TextBox textBox = sender as TextBox;

    if (textBox != null && !this._lostFocusFired[textBox]))
    {
        ValidationUtil.UpdateSourceOnElementBindings(textBox);
    }
}
您可以验证输入,并在if语句之外对结果作出反应