2017-10-05 278 views
0

我有一个按钮,可以返回,并将其绑定到需要参数的命令。是否有可能传递命令参数作为一种方法,获得字符串?Xamarin MvvmCross将数据绑定为方法

我想让这样的事情:

<ImageButton 
    local:MvxBind="Click GoHomeCommand, CommandParameter='Application.Context.GetSharedPreferences('USER_INFO', FileCreationMode.Private).GetString('USER_FACEBOOK_ID', null)'" 
    android:id="@+id/backButton" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:src="@drawable/ic_menu_back" 
    android:background="@null" 
    android:paddingLeft="30dp" 
    android:paddingRight="30dp" /> 

正如你可以看到我绑定点击我试图发送命令参数,现在显然是一个字符串,但我可以发送PARAMS是方法的结果:Application.Context.GetSharedPreferences('USER_INFO', FileCreationMode.Private).GetString('USER_FACEBOOK_ID', null) ??

回答

0

这是不可能的。有一些方法可以解决它。最简单的可能是设置一个你在Android中实现的ValueConverter,并执行此操作。

我认为更好的选择是向该命令添加一个函数,然后通过在Android中实现的IoC调用接口。

0

这里已经有一些插件,它在内部使用SharedPreferences,所以你可以利用这些插件来公开你在共享首选项中的字符串。

我是Cheesebaron.MvxPlugin.Settings的作者,如果您为插件提供配置,并且您的设置的路径为USER_INFO,您将能够从插件中获取相同的值。

因此,首先将NuGet添加到您的Core和Droid项目中。

在你的Droid项目覆盖GetPluginConfiguration的Setup.cs文件:

protected override IMvxPluginConfiguration GetPluginConfiguration(Type plugin) 
{ 
    if (plugin == typeof(Cheesebaron.MvxPlugins.Settings.PluginLoader)) 
    { 
     return new DroidCheeseSettingsConfiguration 
     { 
      SettingsFileName = "USER_INFO" 
     }; 
    } 

    return base.GetPluginConfiguration(plugin); 
} 

然后在您的视图模型,你可以将任何设置:

public class MyViewModel : MvxViewModel 
{ 
    private ISettings _settings; 

    public MyViewModel(ISettings settings) 
    { 
     _settings = settings; 
    } 

    public string FacebookId => _settings.GetValue("USER_FACEBOOK_ID", string.Empty); 
} 

现在你可以使用FacebookId作为参数而不是你的绑定。