【问题标题】:Should I use the targetType parameter of the IValueConverter我应该使用 IValueConverter 的 targetType 参数吗
【发布时间】:2017-06-01 08:38:28
【问题描述】:

每次编写值转换器时,我都想知道如何处理在IValueConverterConvertConvertBack 方法中指定的targetType 参数:

object Convert(object value, Type targetType, object parameter, CultureInfo culture)
object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)  

我注意到许多实现都在使用 targetType,只需检查它 (if (targetType == typeof(RequiredType))) 并在类型不符合预期时抛出一些异常或返回空值:

但他们中的许多人(我认为这是大多数)完全忽略了参数:

我尝试使用该参数找到一些指导方针或提示,但不幸的是我一无所获。 两种方法都在发挥作用,但是其中一种方法更正确吗?这些方法的优点和缺点是什么?我应该忽略还是使用该参数?

我个人的观点是不检查参数以使转换器的使用更灵活,但我很高兴得到您的意见。

【问题讨论】:

  • 该参数的重点是调用者将告诉您将其转换为什么;如果你总是忽略它们并返回相同的东西,它不会比你检查并抛出异常更“灵活”。同样,如果他们只要求您要返回的东西,那么再次:它实际上不再灵活。在大多数情况下,您只会转换为一件事,因此它很少是真正的问题,因此为什么很多代码会忽略它。

标签: c# .net wpf xaml ivalueconverter


【解决方案1】:

调用者会告诉你转换值所需的类型是什么:

  1. 如果你知道你总是会转换为一种类型,例如true/falseVisibility,那么你可以忽略targetType。如何使用转换器很明显,不需要抛出异常。
  2. 根据targetType 转换值,例如使用转换器转换为ImageSourceBrush。在第一种情况下,您想要生成图像(例如错误图像),在另一种情况下您想要简单的颜色(例如红色)。
  3. 如果您知道有人可能会将您的转换器与 targetType 一起使用,而您不希望这样做,并且不清楚它是否受支持,那么您可以通过引发异常来警告开发人员。

我认为最常见的情况是 1)。

【讨论】:

    猜你喜欢
    • 2016-06-01
    • 1970-01-01
    • 2014-10-13
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2012-05-20
    • 2018-04-13
    相关资源
    最近更新 更多