我已经在Functions in x:Bind(在Windows 10内部版本14393中引入)和IValueConverter上进行过工作,以将转换后的值绑定到UI元素的属性。但是,我想知道哪种方法正确或有效地绑定了值。使用它们有什么区别。
示例:您可以同时使用x:Bind和IValueConverter中的Function来将字符串绑定到“ calendardatepicker”。但是,哪个有效?
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
}
}
答案 0 :(得分:2)
实际的区别在于参数的数量和易用性,如the doc中所述:
- 实现价值转换的更简单方法
- 一种绑定依赖于多个参数的方式
并根据 Raymond Chen的评论:
我认为,拥有一个具有使用多个参数而不是实现接口的功能的功能会容易得多。
您看到的是,您只能在x:Bind ConvertStringToDate(Date)
中说x:Bind
,比IValueConverter
转换值更容易和更漂亮