数据绑定

可能的例外情况

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>