【问题标题】:Convert empty string values to null in TextBoxes for the entire application将整个应用程序的 TextBoxes 中的空字符串值转换为 null
【发布时间】:2018-06-05 01:26:43
【问题描述】:

默认情况下,如果您先输入一些文本然后再次清除它,WPF TextBox 绑定会将字符串属性设置为空字符串。我理解这种选择的逻辑,但这意味着数据库可以同时包含 NULL 和这些字段的空字符串值。

在检索和使用这些值时,始终检查NULL 和空字符串是一种很好的做法,但我想从核心解决问题。

有几种解决方案:WPFConverters,在业务层将空字符串转换为NULL或者使用TargetNullValue

<TextBox Text="{Binding Value, TargetNullValue=''}"/>

不幸的是,这些解决方案需要针对单个属性和TextBoxes 实施。

有没有办法让所有TextBoxes 将空字符串转换为NULL 值?

【问题讨论】:

  • 您可以编写自己的自定义绑定扩展并将其用于您的TextBoxes。请查看this article 了解更多信息。
  • 您还可以创建一个从TextBox 派生的自定义TextBox 控件并覆盖Text 属性,该属性将在string.IsNullOrEmpty 返回true 时返回null。
  • 在你的 app.xaml 中试试这个:stackoverflow.com/a/15567948/8507673
  • @XAMlMAX:谢谢你的建议。然而,这两种解决方案都需要重构所有现有的TextBoxes,并且所有未来的开发都必须使用新语法。我希望有一个可以像@sTrenat 建议的那样在全球范围内应用的解决方案,但是TextBox.Text 属性不能与null 进行比较。它总是一个字符串或空字符串。

标签: c# wpf


【解决方案1】:

全局类处理程序呢? 每次 TextBox 失去焦点时,检查它是否为空字符串。

将以下内容添加到您的App.xaml.cs 中的OnStartup 方法中

EventManager.RegisterClassHandler(typeof(TextBox), TextBox.LostFocusEvent, new RoutedEventHandler((s, a) =>
{
    if((s as TextBox).Text == "")
        (s as TextBox).Text = null;
}));

【讨论】:

  • 这没有提供问题的答案。您可以search for similar questions,或参考页面右侧的相关和链接问题找到答案。如果您有一个相关但不同的问题,ask a new question,并包含指向此问题的链接以帮助提供上下文。见:Ask questions, get answers, no distractions
  • 我不同意,我认为可能会回答提出的问题或将用户指向正确的方向。如果可以从 RegisterClassHandler 访问 TextChanged 事件,那么它可以用于适应用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 2022-01-08
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多