所以我在后面的代码中调用TextBox的Text属性上的UpdateSource()方法。应该出现ErrorTemplate,但直到我将鼠标移到TextBox上才会出现。
或者它确实可以,但不会重新粉刷?任何想法如何解决这个问题立即更新GUI?
编辑:
是PropertyChanged。问题不在于更新源。问题是,当源更新时,它会导致验证并且ErrorTemplate应该出现,但是直到我将鼠标移动到经过验证的TextBox上才会出现。
编辑:
当我将鼠标移动到其他一些GUI元素(如单选按钮)时,显然它会更新,这与验证没有任何关系。这绝对是重新绘制或绑定验证错误检查触发器的问题。如何在代码后面触发?
答案 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具有焦点时触发。您可能需要抛出自定义事件并在页面/窗口处理它。