En essayant de créer un sélecteur de Xamarin Forms
Je suis en train de créer un sélecteur à 3 composants. J'ai suivi le tutoriel sur le Xamarin site ici. J'ai eu le contrôle de travailler, sauf que quand je clique sur le bouton Terminé sur le plateau (C'est la valeur par défaut bouton terminé). J'obtiens l'exception suivante:
Système.InvalidCastException: Impossible de convertir l'objet de type 'myproj.iOS.MyPickerModel' de type 'Xamarin.Les formulaires.La plate-forme.iOS.PickerRenderer+PickerSource'.
Voici mon code:
Dans la proj:
public class MyPicker: Picker {}
Dans l'iOS proj:
[assembly: ExportRenderer(typeof(MyPicker), typeof(MyPickerRenderer))]
public class MyPickerRenderer: PickerRenderer
{
//Override the OnElementChanged method so we can tweak this renderer post-initial setup
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
if (Control != null)
{
var picker = (UIPickerView)this.Control.InputView;
picker.BackgroundColor = UIColor.White;
picker.Model = new MyPickerModel();
}
Et le Modèle:
public class MyPickerModel : UIPickerViewModel
{
private string[] array1 = new string [] {
"1","2","3","4"
};
private string[] array2 = new string [] {
"1a","2a","3a","4a"
};
private string[] array3 = new string [] {
"a","b","c","d"
};
public override nint GetComponentCount (UIPickerView pickerView)
{
return 3;
}
public override nint GetRowsInComponent (UIPickerView pickerView, nint component)
{
//Returns
switch (component) {
case 0: return array1.Length;
case 1: return array2.Length;
case 2: return array3.Length;
default:break;
}
return 0;
}
public override string GetTitle (UIPickerView pickerView, nint row, nint component)
{
//Returns
switch (component)
{
case 0: return array1[row];
case 1: return array2[row];
case 2: return array3[row];
default: break;
}
return null;
}
public override nfloat GetComponentWidth (UIPickerView pickerView, nint component)
{
switch (component)
{
case 0: return 100.0f;
case 1: return 100.0f;
case 2: return 100.0f;
default: break;
}
return 0;
}
public override nfloat GetRowHeight (UIPickerView pickerView, nint component)
{
return 40f;
}
}
Et enfin ma page:
public class MyPage : ContentPage
{
public MyPage()
{
MyPicker picker = new MyPicker
{
Title = "Color",
VerticalOptions = LayoutOptions.CenterAndExpand
};
picker.SelectedIndexChanged += (sender, args) =>
{
};
var mainLayout = new StackLayout
{
Orientation = StackOrientation.Vertical,
Children =
{
picker
}
};
//Accomodate iPhone status bar.
this.Padding = new Thickness(0, Device.OnPlatform(20, 0, 0), 0, 0);
this.BackgroundImage = "background.png";
//Build the page.
this.Content = mainLayout;
}
}
Je ne comprends pas pourquoi son train de jeter MyPickerModel à PickerRenderer+PickerSource
Merci!
OriginalL'auteur yannify | 2015-03-28
Vous devez vous connecter pour publier un commentaire.
Vous avez été près de là...il suffit de créer une nouvelle instance de la
UIPickerView
, affecter votre modèle personnalisé (MyPickerModel
) et ensuite affecter leUIPickerView
àControl.InputView
.OnElementChanged
dans votre moteur de rendu ressemblerait alors à ceci:OriginalL'auteur M. Hartner
Pas sûr de savoir comment IOS fonctionne, mais comme dirait ma version d'android a montre ce dont vous avez besoin:
Mon basePicker ressemble à ceci:
De ma plate-forme spécifique de vue ressemble:
Bref ressemble à u besoin de changer votre
être
Puis il suffit de référence ce dont vous avez besoin à partir de là peut-être ajouter une référence à votre modèle
OriginalL'auteur SatanEnglish