【问题标题】:Displaying a custom value type in WPF without using a Value Converter在 WPF 中显示自定义值类型而不使用值转换器
【发布时间】:2010-01-27 19:44:11
【问题描述】:

我正在开发的系统在内部使用了大量的自定义值类型。我正在使用 WPF 开发原型 UI。 WPF 不知道如何显示自定义类型。我知道我可以编写一个自定义 ValueConverter 来执行此操作,但我真的不希望每次绑定到我的 XAML 中的类时都必须指定转换器的使用。

是否有我可以在自定义值类型中实现的接口,让 WPF 知道如何在本机显示它?

或者,有没有一种方法可以指定一个应用程序范围的值转换器,该转换器将应用于我们自定义类型的任何实例,而不必在每个绑定表达式中指定 ValueConveter?

【问题讨论】:

    标签: wpf data-binding ivalueconverter valueconverter


    【解决方案1】:

    啊哈!弄清楚了。我需要编写一个 TypeConverter 并将其应用于我的自定义类型。这允许 WPF 自动确定如何处理它们,而无需在 XAML 中指定模板或转换器。

    http://msdn.microsoft.com/en-us/library/ayybcxe5.aspx

    【讨论】:

    • 这是个坏主意,也是问题的糟糕解决方案。您应该在App.xaml 或Themes/Generic.xaml 中使用默认的DataTemplate。模板是 WPF 强大的原因:同一个对象在应用程序的不同部分或不同应用程序中看起来可能不同,并且您可以在数据层和 UI 之间获得清晰的分离。良好 WPF 设计的一个基本原则是您的数据层应该对 UI 一无所知。这有很多很好的理由。使用了解 UI 的 TypeConverter 严重违反了这个原则。
    • @Ray Burns:解决方案对于自定义值类型来说是完全可以的 - 例如,我有自定义字符串、十进制和布尔类型以简化转换和数据库访问
    【解决方案2】:

    您应该能够为您的值类型指定DataTemplate,并将其放入您的应用程序资源中。这将决定您的值类型如何全局显示。

    【讨论】:

      【解决方案3】:

      很抱歉,这很明显很愚蠢,但是为什么不在值类型中覆盖 ToString()?

      【讨论】:

      • 我做到了。这不起作用,至少对于我正在处理的情况,它绑定到 DataGrid。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2011-01-19
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多