我有一个选择器控件:
<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
答案 0 :(得分:1)
这是为视图设置绑定上下文的一种非常奇怪的方法。您必须为每个元素指定源的事实添加了许多额外的样板代码。
尝试在视图构造函数
中将bindingcontext设置为模型BindingContext = new MyModel ();
然后XAML成为
<Picker Title="Number of People"
ItemsSource="{Binding SomeList}"
SelectedItem="{Binding SomeListSelectedIndex}">
</Picker>
或者使用适当的MVVM框架并为自己节省很多悲伤。我可以推荐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'找到属性,可绑定属性或事件。”