如何将UISegmentedControl绑定到ViewModel命令?

时间:2015-08-07 12:47:45

标签: ios xamarin mvvmcross

Xamarin和mvvmcross的新手,我试图将UISegmentedControl的ValueChanged事件绑定到ViewModel中的命令。

viewModel命令如下所示:

    public ICommand DonorCommand
    {
        get
        {
            return _donorCommand ?? (_donorCommand = new MvxCommand<string>(m =>
            {
                DonorIndividual.SetVisible(m);
                DonorBusiness.SetVisible(m);
                OnPropertyChanged(() => CurrentDonor);
            }));

        }
    }

我的绑定看起来像这样:

        this.CreateBinding(DonorType).For(c => c.ValueChanged).To((DonationViewModel vm) => vm.DonorCommand).Apply();

当我尝试编译说:Cannot convert 'lambda expression' to non-delegate type 'string' (CS1660)

时出错

所以我尝试在类型为int的ViewModel中创建一个新命令而不是字符串(在查看多部分控件的文本后,该怎么做?):

    private ICommand _donorTypeCommand;
    public ICommand DonorTypeCommand
    {
        get
        {
            return _donorCommand ?? (_donorCommand = new MvxCommand<int>(m =>
                {
                    // break here to see what's happening
                    OnPropertyChanged(() => CurrentDonor);
                }));

        }
    }

以此作为绑定:

        this.CreateBinding(DonorType).For(c => c.ValueChanged).To((DonationViewModel vm) => vm.DonorTypeCommand).Apply();

我得到了同样的错误。 (验证它在每种情况下都抱怨类型&#39;字符串&#39;)不确定这是什么意思我该怎么做这个绑定?

1 个答案:

答案 0 :(得分:1)

这是因为它试图将您的命令类型(<string>)推断为ValueChanged,这不是字符串属性。

所以,你可能想看看这个:

http://fetchmytip.blogspot.be/2015/02/ios-uisegmentedcontrol-custom-binding.html

诀窍是为所有UISegmentedControls创建一个默认目标绑定,当它发生变化时会自动绑定到UISegmentedControl.SelectedSegment的值,在你的情况下,你的命令必须是{{1}类型1}}然后(如.SelectedSegment)