我是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];
}
}
答案 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>