Xamarin.Forms - Picker选择的Item绑定没有响应

时间:2017-09-13 06:23:52

标签: c# xamarin mvvm binding xamarin.forms

我在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作为变量。它不是最聪明的方式,你有更好的想法吗?

任何帮助都会非常感激。

2 个答案:

答案 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
{...}