Xamarin形成Picker Binding错误

时间:2017-11-12 10:51:38

标签: xamarin.forms

我有一个选择器控件:

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

尝试构建时,我收到“没有找到'ItemsSource'的属性,可绑定属性或事件”错误。

上面我有一个标签:

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

这种绑定完美无缺

MyModelHandler是一个静态类,只允许一个Model

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

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

模型很简单:

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));
     }
...
}

编辑:使用Xamarin 4.3

2 个答案:

答案 0 :(得分:1)

这是为视图设置绑定上下文的一种非常奇怪的方法。您必须为每个元素指定源的事实添加了许多额外的样板代码。

尝试在视图构造函数

中将bindingcontext设置为模型
BindingContext = new MyModel ();

然后XAML成为

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

或者使用适当的MVVM框架并为自己节省很多悲伤。我可以推荐FreshMvvm。

https://github.com/rid00z/FreshMvvm

答案 1 :(得分:1)

您可以查看您的Xamarin.Forms版本。

在Xamarin.Forms 2.3.4.184-pre1中引入了ItemsSource属性,请参阅此处的发行说明:

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

如果您使用的是较旧的Xamarin.Forms版本,则会收到Xamarin.Forms XAML错误“没有为'ItemsSource'找到属性,可绑定属性或事件。”