uwp - 在 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
}
}
解决方案
实际的区别在于参数的数量和易用性,如文档中所述:
- 更简单的实现价值转换的方法
- 一种绑定依赖多个参数的方法
并且来自Raymond Chen的评论:
- 函数在编译时解析,这有利于正确性(如果数据类型错误,则会出现编译时错误)和性能(不必保持装箱和拆箱)。转换器是在运行时查找的,因此您不会知道您做错了加载页面并获得运行时异常。但有时松散的打字很方便。
而且我认为拥有一个具有使用多个参数而不是实现接口的能力的功能要容易得多。
x:Bind ConvertStringToDate(Date)
你看,你可以说x:Bind
哪种转换值比IValueConverter
推荐阅读
- php - Laravel Eloquent 创建相关项目不保存
- java - 在不依赖数据库 oracle 的用户名和密码的情况下启动 spring-boot 应用程序?
- r - 根据具有不同大小的另一个数据框在数据框上添加新列
- asp.net-core - ASP.NET Core Web API 中的上传文件百分比
- javascript - 如何在Javascript中制作对象的深层副本
- powershell - POWERSHELL GET-ADUSER 在变量中显示错误?
- apache-kafka-streams - 全局 KTable 存储限制
- python - 从字典值分组并从其他组中删除重复项
- swift - 如何拥有绑定到协议的特定枚举案例
- flutter - 我想发布/修补地图
> 以及在颤振中使用 Dio 的 ImageFile