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;)不确定这是什么意思我该怎么做这个绑定?
答案 0 :(得分:1)
这是因为它试图将您的命令类型(<string>
)推断为ValueChanged
,这不是字符串属性。
所以,你可能想看看这个:
http://fetchmytip.blogspot.be/2015/02/ios-uisegmentedcontrol-custom-binding.html
诀窍是为所有UISegmentedControls
创建一个默认目标绑定,当它发生变化时会自动绑定到UISegmentedControl.SelectedSegment
的值,在你的情况下,你的命令必须是{{1}类型1}}然后(如.SelectedSegment)