在我工作的Xamarin.Forms项目中,我注意到我们将很多整数值绑定到标签文本。例如:
myLabel.SetBinding(Label.TextProperty, nameof(MyViewModel.TotalQty));
其中MyViewModel.TotalQty
是int
。
This article from the Xamarin guide说:
在Xamarin.Forms中,绑定不执行任何隐式类型转换,如果需要将非字符串对象显示为字符串,则必须提供类型转换器或使用StringFormat。
但是我使用的代码正在运行,因此显然存在隐式类型转换。所以我的结论是文章中的陈述是错误的/过时的,或者陈述适用于XAML,而不是代码。我在网上找到答案时遇到了麻烦 - 有人知道吗?
答案 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); }
}
需要注意的一些要点:
Create
方法中,我设置了我的属性的真实类型(Command - 2nd arg); SetValue
方法,该方法获得object
值; MyProperty = new Command(() => { return; });
,并使MyProperty = string.Empty;
之类的内容无效; 记住XAML代码是一种标记语言,整个代码将被翻译成'到C#。当然可以对它的使用有一些推论和约定,但是应用相同的规则。
我希望它可以帮到你。 (我很抱歉我的英语不好)