我应该使用IValueConverter

时间:2017-06-01 08:38:28

标签: c# .net wpf xaml ivalueconverter

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

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)))并抛出一些异常或返回null值,如果类型不是预期的那样:

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

我尝试使用参数找到一些指导或提示,但不幸的是我发现什么都没有。 这两种方法都在做自己的工作,但其中一种方法更正确吗?这些方法的优点和缺点是什么?我应该忽略或使用参数吗?

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

1 个答案:

答案 0 :(得分:0)

调用者将告诉您转换值所需的类型:

  1. 如果您知道您将始终转换为一种类型,例如for($x = 0; $x <= 6; $x++) { $date = date('j', strtotime('this week +' .$x . 'days')); $arr[$date] = [ 'y' => $date, 's' => 0, 'c' => 0, 'cl' => 0 ]; } true/false,您可以忽略Visibility。显而易见的是如何使用转换器,不需要抛出异常。
  2. 根据targetType转换价值,例如使用转换器转换为targetTypeImageSource。在第一种情况下,您想要生成图像(例如错误图像),而在另一种情况下,您需要一种简单的颜色(例如红色)。
  3. 如果您知道某人可能会使用您不希望使用Brush的转换器,并且不支持它是否显而易见,那么您可以通过抛出异常来警告开发人员。
  4. 我认为最常见的情况是1)。