c# - ValidationRules 失败时未触发 WPF TextBox IValueConverter ConvertBack
问题描述
我有一个链接到双精度的文本框?在我的后端视图模型中。我需要在清空 TextBox 时触发 ConvertBack,但验证规则“ValidateNotNullOrWhiteSpace”失败,因此没有调用 ConvertBack。我的问题是,当我清空文本框时,我希望 viewModel 为空。现在 viewModel 保留旧值示例 10。
即使 ValidationRules 失败,有没有办法强制绑定?
<TextBox x:Name="txtSlabDepth" Grid.Row="0" Grid.Column="1" Margin="0,3,0,0"
TextAlignment="Right" MaxLength="15"
KeyDown="Textbox_KeyDown" TextChanged="Textbox_TextChanged" >
<Binding Path="SlabDepth">
<Binding.Converter>
<converters:LengthInchTextboxConverter x:Name="LengthInchTextboxConverter_SlabDepth" />
</Binding.Converter>
<Binding.ValidationRules>
<validations:ValidateLength x:Name="ValidateLength_SlabDepth"/>
<validations:ValidateNotNullOrWhiteSpace x:Name="ValidateNotNullOrWhiteSpace_SlabDepth"/>
</Binding.ValidationRules>
</Binding>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSlabDepthModified}" Value="True">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
谢谢你。
解决方案
当您有一个可以实现INotifyDataErrorInfo
orIDataErrorInfo
接口的视图模型类时,您不应该使用验证规则来验证您的数据。
无论如何,您可以通过设置其属性来控制何时运行验证规则。ValidationStep
RawProposedValue
是默认值。这意味着验证规则在任何值转换发生之前运行。如果您希望它在视图模型的源属性设置后运行,您应该将该ValidationStep
属性设置为UpdatedValue
:
<validations:ValidateLength x:Name="ValidateLength_SlabDepth" ValidationStep="UpdatedValue" />
请参阅此博客文章了解更多信息。
推荐阅读
- ios - 在 iOS 应用程序中设置 Microsoft Azure SAML 2.0
- three.js - 覆盖网格对于 Forge 3D 查看器中的某些材质颜色是透明的
- tensorflow - 在 Beagle Bone Black 中安装张量流
- mongodb - 在多个相同的集合中查找不同的字段 mongodb
- linux - 使用 ubuntu:16.04 运行 docker 容器实际上运行的是 ubuntu 18.04
- python - 为什么在另一个函数中重新定义一个函数不起作用?(蟒蛇龟)
- geometry - 球体-球体相交
- reactjs - React onChange event.target.value 对象更新事件对象
- java - 在 MacOs 上的 R 中加载 rJava 库失败
- ruby-on-rails - 在灯箱图像预览中的关闭图标旁边添加另一个图标