Picker Xamarin中的例外情况

时间:2017-11-28 13:39:39

标签: xamarin.forms

我是xamarin的新手。我试图实现Picker,项目构建很好,但它一直给我以下运行时异常:

" System.ArrayTypeMismatchException:'尝试访问元素作为与数组不兼容的类型。'" 即时通讯附加我的xaml,代码隐藏和异常屏幕截图。希望有人可以提供帮助。

这是xaml部分:

          <Label Text="{Binding Source={x:Reference picker}, 
          Path=SelectedItem}"/> 

                        <Label x:Name="hasarnedeniLabel"></Label>
                        <Picker x:Name="picker" Title="Select a monkey">
                            <Picker.ItemsSource>
                                <x:Array Type="{x:Type x:String}">
                                    <x:String>Baboon</x:String>
                                    <x:String>Capuchin Monkey</x:String>
                                    <x:String>Blue Monkey</x:String>
                                    <x:String>Squirrel Monkey</x:String>
                                    <x:String>Golden Lion Tamarin</x:String>
                                    <x:String>Howler Monkey</x:String>
                                    <x:String>Japanese Macaque</x:String>
                                </x:Array>
                            </Picker.ItemsSource>
                        </Picker>

和背后的代码:

    void OnPickerSelectedIndexChanged(object sender, EventArgs e)
    {

        var picker = (Picker)sender;
        int selectedIndex = picker.SelectedIndex;

        if (selectedIndex != -1)
        {
            hasarnedeniLabel.Text = (string)picker.ItemsSource[selectedIndex];


        }
    }

screenshot of exception

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的Xamarin.Forms?

在Xamarin.Forms 2.3.4之前,没有必要在XAML中声明数组类型:

<Picker x:Name="picker" Title="Select a monkey">
  <Picker.ItemsSource>
    <x:String>Baboon</x:String>
    <x:String>Capuchin Monkey</x:String>
    <x:String>Blue Monkey</x:String>
    <x:String>Squirrel Monkey</x:String>
    <x:String>Golden Lion Tamarin</x:String>
    <x:String>Howler Monkey</x:String>
    <x:String>Japanese Macaque</x:String>
  </Picker.ItemsSource>

一般来说,您应该使用MVVM。因此,将有一个VM,您的阵列绑定到UI控件。这是一个official Xamarin guide,可以帮助您理解MVVM。

以下是一个例子:

<Picker
  Title="Select a monkey"
  ItemsSource="{Binding Monkeys}" />

为了使其工作,您还需要为包含此选择器控件的页面创建ViewModel,并将页面的BindingContext设置为ViewModel:

public MainPage()
{
  InitializeComponent();
  this.BindingContext = new MainPageViewModel(); /* Which should contain public List<string> Monkeys { get; set; } */
}

或者,您可以在XAML中设置BindingContext:

<ContentPage
  xmlns:vm="clr-namespace:YourProject.ViewModelsNamespace"
..>
  <ContentPage.BindingContext>
    <vm:MainPageViewModel />
  </ContentPage.BindingContext>
</ContentPage>