首页 > 解决方案 > 在 x:Bind 和 IValueConverter 中使用函数有什么区别?

问题描述

在 x:Bind (在 windows 10 build 14393 中引入)和IValueConverter中的两个函数都工作过,以将转换后的值绑定到 UI 元素的属性。但是,我想知道绑定值的正确或有效程序。使用它们有什么区别。

示例:您可以同时使用 x:Bind 和 IValueConverter 中的函数将字符串绑定到“日历选择器”。但是,哪个是有效的?

1.x:Bind中的函数

//Xaml

 <CalendarDatePicker Date="{x:Bind ConvertStringToDate(Date),Mode=OneWay}"></CalendarDatePicker>

//C#

 public DateTimeOffset ConvertStringToDate(string date)
   {
      DateTime d;
      d = System.Convert.ToDateTime(date);
      d = DateTime.SpecifyKind(d, DateTimeKind.Local);
      return (DateTimeOffset)d;
   }

2.使用IValueConverter

//Xaml

<CalendarDatePicker Date="{x:Bind Date,Converter={StaticResource StringtoDate},Mode=OneWay}"></CalendarDatePicker>

//C#

 public class DateToStringConverter : IValueConverter
 {
    public object Convert(object value, Type targetType,
              object parameter, string language)
    {
        DateTime d = DateTime.Now;
        string date = (string)value;
        d = System.Convert.ToDateTime(date);
        d = DateTime.SpecifyKind(d, DateTimeKind.Local);
        return (DateTimeOffset)d;
    }
    public object ConvertBack(object value, Type targetType,
            object parameter, string language)
    {
            //blah blah
    }
}

标签: uwpwindows-10-universaluwp-xaml

解决方案


实际的区别在于参数的数量和易用性,如文档中所述:

  • 更简单的实现价值转换的方法
  • 一种绑定依赖多个参数的方法

并且来自Raymond Chen的评论:

  • 函数在编译时解析,这有利于正确性(如果数据类型错误,则会出现编译时错误)和性能(不必保持装箱和拆箱)。转换器是在运行时查找的,因此您不会知道您做错了加载页面并获得运行时异常。但有时松散的打字很方便。

而且我认为拥有一个具有使用多个参数而不是实现接口的能力的功能要容易得多。

x:Bind ConvertStringToDate(Date)你看,你可以说x:Bind哪种转换值比IValueConverter


推荐阅读