Xamarin.Forms绑定 - 隐式类型转换是在代码中完成的,而不是在XAML中完成的吗?

时间:2017-10-23 15:54:09

标签: c# xaml xamarin xamarin.forms implicit-conversion

在我工作的Xamarin.Forms项目中,我注意到我们将很多整数值绑定到标签文本。例如:

myLabel.SetBinding(Label.TextProperty, nameof(MyViewModel.TotalQty));

其中MyViewModel.TotalQtyint

This article from the Xamarin guide说:

  

在Xamarin.Forms中,绑定不执行任何隐式类型转换,如果需要将非字符串对象显示为字符串,则必须提供类型转换器或使用StringFormat。

但是我使用的代码正在运行,因此显然存在隐式类型转换。所以我的结论是文章中的陈述是错误的/过时的,或者陈述适用于XAML,而不是代码。我在网上找到答案时遇到了麻烦 - 有人知道吗?

1 个答案:

答案 0 :(得分:0)

不是在谈论官方文档,但根据我的经验,我注意到绑定设置为对象扩展(这些值只是像object一样使用,你可以看到here at the source code),并且应该具有从值到目标类型的内部显式类型转换,一旦需要在创建可绑定属性时设置属性的类型。

例如:

public static readonly BindableProperty MyCommandProperty = BindableProperty.Create(nameof(MyCommand), typeof(Command), typeof(MyObjectType), null, BindingMode.OneWay);
public Command MyCommand
{
    get { return (Command)GetValue(MyCommandProperty); }
    set { SetValue(MyCommandProperty, value); }
} 

需要注意的一些要点:

  • 在静态BindableProperty的Create方法中,我设置了我的属性的真实类型(Command - 2nd arg);
  • 在我的媒体资源中,我使用SetValue方法,该方法获得object值;
  • 键入的MyCommand属性强制其内部使用属于同一类型,例如MyProperty = new Command(() => { return; });,并使MyProperty = string.Empty;之类的内容无效;

记住XAML代码是一种标记语言,整个代码将被翻译成'到C#。当然可以对它的使用有一些推论和约定,但是应用相同的规则。

我希望它可以帮到你。 (我很抱歉我的英语不好)