数据绑定
可能的例外情况
System.ArrayTypeMismatchException:尝试将元素作为与数组不兼容的类型进行访问
尝试在启用 XAML 预编译时将集合绑定到不可绑定的属性时,可能会发生此异常。一个常见的例子是尝试绑定到 Picker.Items
。见下文。
System.ArgumentException:类型为“Xamarin.Forms.Binding”的对象无法转换为“System.String”类型
尝试在禁用 XAML 预编译时将集合绑定到不可绑定的属性时,可能会发生此异常。一个常见的例子是尝试绑定到 Picker.Items
。见下文。
Picker.Items
属性不可绑定
此代码将导致错误:
<!-- BAD CODE: will cause an error -->
<Picker Items="{Binding MyViewModelItems}" SelectedIndex="0" />
例外可能是以下之一:
System.ArrayTypeMismatchException:尝试将元素作为与数组不兼容的类型进行访问。
要么
System.ArgumentException:类型为“Xamarin.Forms.Binding”的对象无法转换为“System.String”类型。
具体来说,Items
属性是不可绑定的。解决方案包括创建自己的自定义控件或使用第三方控件,例如 FreshEssentials 的 BindablePicker
。在项目中安装 FreshEssentials NuGet 软件包后,可以使用包含 ItemsSource
属性的软件包的 BindablePicker
控件:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:fe="clr-namespace:FreshEssentials;assembly=FreshEssentials"
xmlns:my="clr-namespace:MyAssembly;assembly=MyAssembly"
x:Class="MyNamespace.MyPage">
<ContentPage.BindingContext>
<my:MyViewModel />
</ContentPage.BindingContext>
<ContentPage.Content>
<fe:BindablePicker ItemsSource="{Binding MyViewModelItems}" SelectedIndex="0" />
</ContentPage.Content>
</ContentPage>