在WPF文本框上禁用并处理“无法转换的值”验证错误

时间:2017-03-23 11:23:36

标签: c# wpf validation data-binding

我希望能够覆盖转换的默认文本框验证并自行处理。我已经查看了验证规则,但我无法让它禁用原始验证。 Xaml到目前为止:

<Grid>
    <TextBox Text="{Binding Path=Option.Value, NotifyOnSourceUpdated=True}" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SourceUpdated">
                <i:InvokeCommandAction Command="{Binding OptionValueChanged}"></i:InvokeCommandAction>
       </i:EventTrigger>
        </i:Interaction.Triggers>
    </TextBox>
</Grid>

Atm,当输入一个字符串时,它显示'Value {val}无法转换',因为该字段是一个整数。如何禁用它来自己处理这个值?

2 个答案:

答案 0 :(得分:3)

private static readonly Period LoginExpiredPeriod = ...; ... // Assuming lastLoginDate and currentDate are LocalDate values if (lastLoginDate + period >= currentDate) { ... } 属性只能设置为int值而不能设置为其他值。您可以自定义错误消息,但您无法将int属性设置为除int之外的其他属性。

有关如何使用自定义int自定义错误消息的示例,请参阅此处的答案:

How do I handle DependencyProperty overflow situations?

如果您想自己处理ValidationRulestring之间的实际转换,可以使用转换器:

int
<Window.Resources>
    <local:YourConverter x:Key="conv" />
</Window.Resources>
...
<TextBox Text="{Binding Path=Option.Value, NotifyOnSourceUpdated=True, Coverter={StaticResource conv}}" / >

答案 1 :(得分:0)

我遇到了同样的问题,添加 TargetNullValue='' 不起作用。添加一个像这里接受的答案一样的转换器表明它不起作用。但是,就我而言,问题出在 ContactId 上,当客户 ComboBox 更改时,它会填充联系人。当 Contacts ObserveableCollection<Contact>.Clear() 被调用时,它抛出了这个错误。

我的修复是确保在调用 ContactIdObserveableCollection<Contact>.Clear() 之前 ObserveableCollection<Contact>.Add(contact) 已更改。