我有一个使用 3.5 版实现 IDataErrorInfo 的 MVVM 应用程序。我想尝试以 4.0 为目标,因此修改了目标框架设置并更改了一些位(BitmapFrames 等)。大多数事情看起来都很好,过程也相对轻松,直到我注意到 IDataErrorInfo 的实现受到了影响。
我的验证控制模板如下所示:
<ControlTemplate x:Key="temp__">
<Border BorderBrush="Orange" BorderThickness="2" CornerRadius="4" SnapsToDevicePixels="True">
<DockPanel>
<Image HorizontalAlignment="Left" VerticalAlignment="Center"
Width="16" Height="16" Margin="-20,0,0,0"
Source="{StaticResource ErrorIcon}"
ToolTip="{Binding ElementName=adornedElement,
Path=AdornedElement.(Validation.Errors),
Converter={helper:ValidationErrorsToStringConverter}}"/>
<AdornedElementPlaceholder Name="adornedElement"/>
</DockPanel>
</Border>
</ControlTemplate>
并在这样的文本框样式中使用:
<Setter Property="Validation.ErrorTemplate" Value="{DynamicResource error_holder}">
在我的 ViewModel 中,GetValidationError(string propertyName) 使用一个开关根据我的规则验证适当的属性。
问题是一旦验证被触发,它就不会更新。例如,可以根据需要设置字段。加载后,必填字段将通过相应的消息标记为无效。以前,当输入仍然无效的值时,工具提示中的错误消息会更新。但是,这不再有效,并且错误消息仍保留为空值消息。
有谁知道 4.0 中 IDataErrorInfo 的实现有什么变化可以解释这一点?知道如何解决吗?