Xamarin.ios DialogViewController中的CommandParameter绑定

Xamarin.ios DialogViewController中的CommandParameter绑定,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,考虑这个简单的ViewModel: public class AboutViewModel : MvxViewModel { private readonly IMvxWebBrowserTask _webBrowserTask; public AboutViewModel(IMvxWebBrowserTask webBrowserTask) { _webBrowserTask = webBrowserTask; } private MvxCommand<

考虑这个简单的
ViewModel

public class AboutViewModel
    : MvxViewModel
{
    private readonly IMvxWebBrowserTask _webBrowserTask;
    public AboutViewModel(IMvxWebBrowserTask webBrowserTask) { _webBrowserTask = webBrowserTask; }

    private MvxCommand<string> _showInStoreCommand;
    public ICommand ShowInStoreCommand
    {
        get
        {
            _showInStoreCommand = _showInStoreCommand ?? new MvxCommand<string>(DoShowInStoreCommand);
            return _showInStoreCommand;
        }
    }

    private void DoShowInStoreCommand(string url)
    {
        _webBrowserTask.ShowWebPage(url);
    }

    public string Wp8StoreUrl
    {
        get { return "http://windowsphone.com/s?appId=myappid"; }
    }

    public string AndroidStoreUrl
    {
        get { return "https://play.google.com/store/apps/details?id=mypackagename"; }
    }

    public string TouchStoreUrl
    {
        get { return "http://itunes.com"; }
    }
}
为什么在
DoShowInStoreCommand
url
参数中总是给我
null
?绑定
元素时如何使用命令参数

编辑:

我尝试了以下方法,因为Slodge在回答中所写的内容与任何扩展方法签名都不匹配,但它在尝试绑定时给了我错误:

 new StringElement("Show in App Store")
                .Bind(bindings, "SelectedCommand CommandParameter(ShowInStoreCommand, TouchStoreUrl)")
错误:

MvxBind: Error:   2.37 Problem parsing Lang binding MvxException: Must follow binding option CommandParameter with an '=' in SelectedCommand CommandParameter(ShowInStoreCommand, TouchStoreUrl)
      at Cirrious.MvvmCross.Binding.Parse.Binding.MvxBindingParser.ParseEquals (System.String block) [0x0003c] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Parse\Binding\MvxBindingParser.cs:83 
  at Cirrious.MvvmCross.Binding.Parse.Binding.Swiss.MvxSwissBindingParser.ParseNextBindingDescriptionOptionInto (Cirrious.MvvmCross.Binding.Parse.Binding.MvxSerializableBindingDescription description) [0x0019a] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Parse\Binding\Swiss\MvxSwissBindingParser.cs:56 
  at Cirrious.MvvmCross.Binding.Parse.Binding.Tibet.MvxTibetBindingParser.ParseNextBindingDescriptionOptionInto (Cirriou
s.MvvmCross.Binding.Parse.Binding.MvxSerializableBindingDescription description) [0x00033] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Parse\Binding\Tibet\MvxTibetBindingParser.cs:49 
  at Cirrious.MvvmCross.Binding.Parse.Binding.Swiss.MvxSwissBindingParser.ParseBindingDescription (ParentIsLookingForComma parentIsLookingForComma) [0x00014] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Parse\Binding\Swiss\MvxSwissBindingParser.cs:176 
  at Cirrious.MvvmCross.Binding.Parse.Binding.Swiss.MvxSwissBindingParser.ParseBindingDescription () [0x00001] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Parse\Binding\Swiss\MvxSwissBindingParser.cs:159 
  at Cirrious.MvvmCross.Binding.Parse.Binding.MvxBindingParser.ParseTargetPropertyNameAndDescription () [0x0000f] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Parse\Binding\MvxBindingParser.cs:72 
  at Cirrious.MvvmCross.Binding.Parse.Binding.MvxBindingParser.TryParseBindingSpecification (System
.String text, Cirrious.MvvmCross.Binding.Parse.Binding.MvxSerializableBindingSpecification& requestedBindings) [0x0001a] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Parse\Binding\MvxBindingParser.cs:51 

您在中创建的绑定:

    new StringElement("Show in App Store").Bind(
                                  bindings, 
                                  e => e.SelectedCommand, 
                                  vm => vm.ShowInStoreCommand, 
                                 new MvxCommandParameterValueConverter(), ViewModel.TouchStoreUrl),
是与ViewModel上的表达式
vm=>vm.ShowInStoreCommand
的绑定,但它捕获
ViewModel.TouchStoreUrl的当前值

如果您想在MvvmCross中使用多重绑定,那么可以使用
zida
扩展名(请参阅)来实现这一点,但是这些扩展名在流畅的表达式语法中很难访问,因此您必须使用基于字符串的语法

因此,这种绑定可以通过以下方式实现:

    new StringElement("Show in App Store").Bind(
                                  bindings, 
                                  e => e.SelectedCommand, 
                                  "CommandParameter(ShowInStoreCommand, TouchStoreUrl)")
    new StringElement("Show in App Store").Bind(
                                  bindings, 
                                  e => e.SelectedCommand, 
                                  "CommandParameter(ShowInStoreCommand, TouchStoreUrl)")