【问题标题】:WPF TextBox IValueConverter ConvertBack not triggered when ValidationRules failValidationRules 失败时未触发 WPF TextBox IValueConverter ConvertBack
【发布时间】:2020-05-15 03:30:43
【问题描述】:

我有一个链接到双精度的文本框?在我的后端视图模型中。我需要在清空 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>

谢谢。

【问题讨论】:

  • 当您有一个可以实现INotifyDataErrorInfoIDataErrorInfo 的视图模型类时,为什么还要使用验证规则?
  • 这就是我和我的团队做 UI 的方式。在这个项目之前,我们之前没有 WPF 经验,所以我们尽最大努力从头开始构建它。

标签: c# wpf binding converters validationrules


【解决方案1】:

当您有一个可以实现INotifyDataErrorInfoIDataErrorInfo 接口的视图模型类时,您不应该使用验证规则来验证您的数据。

无论如何,您可以通过设置其ValidationStep 属性来控制何时运行验证规则。

RawProposedValue 是默认值。这意味着验证规则在任何值转换发生之前运行。如果你希望它在视图模型的源属性设置后运行,你应该将ValidationStep属性设置为UpdatedValue

<validations:ValidateLength x:Name="ValidateLength_SlabDepth" ValidationStep="UpdatedValue" />

更多信息请参考this博文。

【讨论】:

  • 我的视图模型实现了 INotifyPropertyChanged。这与 DataErrorInfo 接口兼容吗?我试过你的validationStep,它似乎工作,但我使用ValidationStep="ConvertedProposedValue"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多