【问题标题】:WPF DataBinding: Nullable Int still gets a validation error?WPF DataBinding:Nullable Int 仍然出现验证错误?
【发布时间】:2011-03-19 03:45:16
【问题描述】:

我有一个文本框数据通过代码绑定到一个可为空的 int。如果我从文本框中删除数据,它会给我一个验证错误(它周围的红色边框)。

这是我的绑定代码:

ZipBinding = new Binding("Zip");
ZipBinding.Source = Address;
zipTextBox.SetBinding(TextBox.TextProperty, ZipBinding);

public Int32? Zip { get { ... } set { ... } }

它被明确标记为 Nullable 那么为什么当我清除文本框时 WPF 想要给我一个验证问题?

【问题讨论】:

    标签: c# wpf validation data-binding


    【解决方案1】:

    验证失败,因为它无法将空字符串转换为可为空的整数。在 Binding 上将TargetNullValue 设置为 string.empty,它将把空字符串转换为 null,这将是有效的。

    【讨论】:

    • 效果很好!请参阅此答案以了解如何在 XAML stackoverflow.com/a/1895482/83111 中执行此操作
    • 不要将其设置为 String.Empty,因为这样您会在模型中的空值字段中看到文本“String.Empty”。请改用空字符串。示例:<TextBox Text="{Binding MyNumericProperty, TargetNullValue=''}" />
    • @Beauty 您可以将其设置为 string.Empty:<TextBox Text="{Binding MyNumericProperty, TargetNullValue={x:Static system:String.Empty}}" />(包括 UserControl 标题处的系统:xmlns:system="clr-namespace:System;assembly=mscorlib")。这与将其设置为值为“string.Empty”的字符串不同......就像有人告诉您将字符串设置为空时,您不要这样做username = "null";
    【解决方案2】:

    一个空的文本框!= null。

    您可能需要调整 ValidationRule 以容纳空字符串作为条目。或者,您可以创建一个转换器来获取空字符串并将它们转换为 null。

    【讨论】:

    • 所以它失败了,因为它试图将 String.Empty 解析为 Int32? ...如果是这样的话,是的,我想我必须创建一个 StringEmpty 到 Null 转换器。
    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2017-11-19
    相关资源
    最近更新 更多