我在xamarin.forms中使用picker
字段进行简单的mvvm绑定。我正在遵循本指南xamarin guide setting a picker's bindings
所以我做了一个模型:
public class Operation
{
public int Number { get; set; }
public string Name { get; set; }
}
ViewModel:
private List<Operation> _operations;
public List<Operation> Operations
{
get { return _operations; }
set
{
_operations = value;
OnPropertyChanged();
}
}
和查看:
<Picker
ItemsSource="{Binding Operations}"
ItemDisplayBinding="{Binding Number}"
SelectedItem = "{Binding SelectedOperation}"/>
<Entry x:Name="HelpEntry"
Text="{Binding SelectedOperation.Name}" />
在Pickers列表中,项目显示正确,但是当我选择项目编号时,则不会显示条目内的绑定。
Ouestion是,我做错了什么?
顺便说一句..我这样做是因为我需要通过使用HelpEntry.Text在我的代码隐藏部分中选择Operation's Name
作为变量。它不是最聪明的方式,你有更好的想法吗?
任何帮助都会非常感激。
答案 0 :(得分:3)
您的ViewModel还应包含SelectedOperation
属性,该属性也应在其setter中调用OnPropertyChanged
方法。
另外,在查看模型时,您应该考虑使用ObservableCollection
代替List
。
答案 1 :(得分:0)
确保您的ViewModel实现了INotifyPropertyChanged接口。轻松实现此目的的方法是创建一个实现接口的BaseViewModel,然后从该基类继承所有具体的视图模型类。
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public class MainPageVM : ViewModelBase
{...}