Normalmente todo tiende a cambiar o mejor dicho a evolucionar, puesto que nos encontramos en busca de una “mejora” constante, y si nos enfocamos a un nicho tecnológico como es la programación, podemos saber que los ingenieros están siempre buscando esto.
Xamarin no se queda fuera de esto y es que el código que posiblemente utilizamos hace unos cuantos meses o semanas atrás ya ha sido cambiado, a esto se le conoce como “obsoleto” o que sera depreciado.
En Xamarin.Forms se utilizan métodos genéricos BindableProperty.Create, estos métodos fueron desaprobados por Xamarin debido a problemas de rendimiento, para lo cual debemos reemplazar todo el uso con las alternativas no genéricas.
A continuación les comparto un ejemplo para un Picker:
Antes:
Propiedad
public static readonly new BindableProperty ItemsSourceProperty = BindableProperty.Create<BindablePicker, IEnumerable>(o => o.ItemsSource, default(IEnumerable), propertyChanged: OnItemsSourceChanged);
Método
static void OnItemsSourceChanged(BindableObject bindable, IEnumerable oldvalue, IEnumerable newvalue) { var picker = bindable as BindablePicker; picker.Items.Clear(); if (newvalue != null) { foreach (var item in newvalue) { picker.Items.Add(item.ToString()); } } }
Despúes
Propiedad
public static readonly new BindableProperty ItemsSourceProperty = BindableProperty.Create("ItemsSource", typeof(List<string>), typeof(BindablePicker), null, BindingMode.OneWay, null, propertyChanged: OnItemsSourceChanged);
Método
static void OnItemsSourceChanged(BindableObject bindable, object oldValue, object newValue) { var picker = bindable as BindablePicker; picker.Items.Clear(); if ((List<string>)newValue != null) { foreach (var item in (List<string>)newValue) { picker.Items.Add(item.ToString()); } } }
Más información: Xamarin Docs