我如何绑定到Spinner.SelectedItem

时间:2018-11-05 08:15:29

标签: xamarin.android reactiveui

我想将微调器中的选定文本绑定到ViewModel中名为SelectedRole的字符串。这就是我所做的

this.Bind(ViewModel, vm => vm.SelectedRole, v => v.roleSpinner.SelectedItem.ToString());

但是,我遇到了一个例外。

System.NotSupportedException: Index expressions are only supported with constants.

1 个答案:

答案 0 :(得分:1)

Spinner的 SelectedItem 属性具有只读访问权限(无设置器),因此绑定是双向的,因此将不起作用。

一种替代方法是安装ReactiveUI.Events软件包,并使用如下所示的 ItemSelected 可观察到的:

_spinner.Events().ItemSelected
    .Select(_ => _spinner.SelectedItem.ToString())
    .BindTo(ViewModel, x => x.Selected);

当然,视图模型属性是反应性的:

private string _selected;
public string Selected
{
    get => _selected;
    set => this.RaiseAndSetIfChanged(ref _selected, value);
}

,如果要初始化微调器值,请使用 SetSelection 方法:

_spinner.SetSelection(2);

我在手机上测试了所有这些内容,并且可以正常工作。让我知道此功能是否满足您的需求。