【问题标题】:WPF Display empty text/ null as default value for bound controlWPF 显示空文本/ null 作为绑定控件的默认值
【发布时间】:2020-02-23 11:31:41
【问题描述】:

我有一个绑定到双类型属性的文本框和一个绑定到枚举类型属性的组合框。在某些情况下,我必须将 Combobox 的 TextBox 和 Selected Item 设置为空字符串。

我想如果我创建一个具有默认值的自定义类并覆盖 ToString() 方法,我可以做到这一点。类似的东西

class MyCustomClass
{
    public double Value { get; set; }
    public bool IsDefault {get; set; }

    public override string ToString() => IsDefault ?  string.Empty : Value.ToString();    
}

然后使用我的自定义类类型将 TextBox 绑定到属性。

但是,当我必须处理多个类型属性时,这工作量太大了。有没有更好的方法,我可以将更多的“WPF 样式”应用于没有特殊默认值的多种数据类型?

【问题讨论】:

  • 你可以写一个IValueConverter
  • 这并不能解决我的问题,因为转换器需要输入 - 我的属性。但是我不能为该属性设置默认值,以便转换器知道它正在处理默认值并且它应该返回空字符串。在我的示例中,我可以将 double.Nan 设置为默认值,并且文本框可以正常工作,但是组合框的枚举值没有,因为该枚举类型没有特殊值,我也不能将其设置为 null。我想要的是我的示例的特定解决方案和通用解决方案。
  • TargetNullValueFallbackValue 怎么样?实际上第一个听起来很适合你,但你需要更新 xaml
  • 我不确定 TargetNullvalue,但我相信 FallBackValue 根本没有帮助。 FallBackValue 只是用来为控件设置一个默认值,但核心问题是我无法确定绑定属性的默认值,因为我无法将 null 设置为 double/enum 数据类型。 Nullable 数据类型目前确实解决了我的问题。我看一下 TargetNullValue,稍后再告诉你。感谢您的建议。

标签: c# wpf binding default-value


【解决方案1】:

我刚刚意识到我可以使用可为空的数据类型而不是原始数据类型,它确实解决了我的问题。不过需要额外调用 GetValueOrDefault() 和一些演员表。

这种方式不需要我的代码中存在的每个数据类型的自定义类,它也非常通用。仍在寻找优雅的 WPF 方式。非常感谢您的想法和贡献。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-07
    • 2013-03-12
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2011-01-15
    相关资源
    最近更新 更多