显式绑定UpdateSource()在鼠标悬停在TextBox之前不起作用

时间:2012-02-01 14:41:02

标签: wpf binding

所以我在后面的代码中调用TextBox的Text属性上的UpdateSource()方法。应该出现ErrorTemplate,但直到我将鼠标移到TextBox上才会出现。

或者它确实可以,但不会重新粉刷?任何想法如何解决这个问题立即更新GUI?

编辑:

是PropertyChanged。问题不在于更新源。问题是,当源更新时,它会导致验证并且ErrorTemplate应该出现,但是直到我将鼠标移动到经过验证的TextBox上才会出现。

编辑:

当我将鼠标移动到其他一些GUI元素(如单选按钮)时,显然它会更新,这与验证没有任何关系。这绝对是重新绘制或绑定验证错误检查触发器的问题。如何在代码后面触发?

2 个答案:

答案 0 :(得分:0)

“TextBox”控件的“绑定到Text”属性非常具体。默认情况下,UpdateSourceTrigger设置为“LostFocus”。它是为了提高性能。尝试将其更改为PropertyChanged。

答案 1 :(得分:-2)

您可以启动Validation_Error。

    <TextBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" x:Name="fieldValue" BorderBrush="SteelBlue" BorderThickness="2" TextWrapping="Wrap" 
             Text="{Binding Path=DF.FieldValue, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True, UpdateSourceTrigger=Explicit}"
             Validation.Error="Validataion_Error"
             LostFocus="fieldValue_LostFocus"  KeyUp="fieldValue_KeyUp"/>


    private void Validataion_Error(object sender, ValidationErrorEventArgs e)
    {
        if (e.Action == ValidationErrorEventAction.Added)
        {
            MessageBox.Show(e.Error.ErrorContent.ToString(), "Fatal Update Error");
        }
    }

可能是因为TextBox上的那个事件只在TextBox具有焦点时触发。您可能需要抛出自定义事件并在页面/窗口处理它。