ValidationRules 失败时未触发 WPF TextBox IValueConverter ConvertBack
WPF TextBox IValueConverter ConvertBack not triggered when ValidationRules fail
我有一个链接到双精度的文本框?在我的后端视图模型中。当我清空 TextBox 时,我需要触发 ConvertBack,但 validationRule "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
或 IDataErrorInfo
接口的视图模型 class 时,不应使用验证规则来验证数据。
无论如何,您可以通过设置其ValidationStep
属性 来控制何时 验证规则为运行。
RawProposedValue
为默认值。这意味着在任何值转换发生之前验证规则是 运行。如果你想在view model的source 属性设置后变成运行,你应该把ValidationStep
属性设置为UpdatedValue
:
<validations:ValidateLength x:Name="ValidateLength_SlabDepth" ValidationStep="UpdatedValue" />
更多信息请参考this博客post。
我有一个链接到双精度的文本框?在我的后端视图模型中。当我清空 TextBox 时,我需要触发 ConvertBack,但 validationRule "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
或 IDataErrorInfo
接口的视图模型 class 时,不应使用验证规则来验证数据。
无论如何,您可以通过设置其ValidationStep
属性 来控制何时 验证规则为运行。
RawProposedValue
为默认值。这意味着在任何值转换发生之前验证规则是 运行。如果你想在view model的source 属性设置后变成运行,你应该把ValidationStep
属性设置为UpdatedValue
:
<validations:ValidateLength x:Name="ValidateLength_SlabDepth" ValidationStep="UpdatedValue" />
更多信息请参考this博客post。