Tengo un control de selector:

<Picker Title="Number of People" 
            ItemsSource="{Binding SomeList, Source={x:Static local:MyModelHandler.MyModel}}" 
            SelectedItem="{Binding SomeListSelectedIndex, Source={x:Static local:MyModelHandler.MyModel}}">
    </Picker>

Cuando intento construir, obtengo el error "No se encontraron propiedades, propiedades enlazables o eventos para 'ItemsSource'".

Por encima de eso tengo una etiqueta:

<Label Text ="{Binding SomeLabel, Source={x:Static local:MyModelHandler.MyModel}, Mode=OneWay}"></Label>

Y esa encuadernación funciona perfectamente

MyModelHandler es una clase estática que solo permite un modelo

public static class MyModelHandler
{
    private static MyModel myModel = new MyModel();

    public static MyModel MyModel
    {
        get
        {
            return myModel;
        }
    }
}

Y la modelo es simple:

public class MyModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private int selectedNumber = 1;
    private string someLabel = "";

    public IList<int> SomeList
    {
        get
        {
            return Enumerable.Range(1, 10).ToList();
        }
    }

    public int SomeListSelectedIndex
    {
        get
        {
            return SomeList.IndexOf(this.selectedNumberOfPeople);
        }
        set
        {
            this.selectedNumber = SomeList[value];
        }
    }

        public double SomeLabel
        {
            get
            {
                return this.someLabel;
            }
            set
            {
                this.someLabel= value;
            }
        }


    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
     }
...
}

Editar: usando Xamarin 4.3

0
Ivan Pavić 12 nov. 2017 a las 13:51

2 respuestas

La mejor respuesta

Puede comprobar su versión de Xamarin.Forms.

La propiedad ItemsSource se introdujo en Xamarin.Forms 2.3.4.184-pre1, consulte las notas de la versión aquí:

https: / /developer.xamarin.com/releases/xamarin-forms/xamarin-forms-2.3/2.3.4-stable/#2.3.4.184-pre1.

Si está utilizando una versión anterior de Xamarin.Forms, obtendrá el error XAML de Xamarin.Forms "No se encontró propiedad, propiedad enlazable o evento para 'ItemsSource'".

1
Benl 13 nov. 2017 a las 22:17

Esa es una forma muy extraña de configurar el contexto vinculante para una vista. El hecho de que tenga que especificar la fuente para cada elemento agrega una gran cantidad de código estándar adicional.

Intente establecer el contexto de enlace al modelo en el constructor de la vista

BindingContext = new MyModel ();

Entonces la XAML se convierte en

<Picker Title="Number of People" 
        ItemsSource="{Binding SomeList}" 
        SelectedItem="{Binding SomeListSelectedIndex}">
</Picker>

O use un marco MVVM adecuado y ahórrese muchos problemas. Puedo recomendar FreshMvvm.

https://github.com/rid00z/FreshMvvm

1
Steve Chadbourne 12 nov. 2017 a las 23:22