[英]Xamarin MvvmCross bind data as method
我有一个返回的按钮,并将其绑定到需要参数的命令。 是否可以将命令参数作为获取字符串的方法来传递?
我想做这样的事情:
<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" />
如您所见,我绑定了click并且试图发送命令参数,该参数现在显然是字符串,但是我可以发送作为方法结果的参数Application.Context.GetSharedPreferences('USER_INFO', FileCreationMode.Private).GetString('USER_FACEBOOK_ID', null)
: Application.Context.GetSharedPreferences('USER_INFO', FileCreationMode.Private).GetString('USER_FACEBOOK_ID', null)
??
这是不可能的。 有一些解决方法。 最简单的方法是设置一个在Android中实现并在其中实现的ValueConverter。
我认为更好的选择是在命令中添加一个函数,然后通过您在Android中实现的IoC调用接口。
那里已经有一些插件,这些插件在内部使用SharedPreferences,因此您可以利用它们来显示共享首选项中的此字符串。
我是Cheesebaron.MvxPlugin.Settings的作者,如果您为插件提供配置,并使用USER_INFO
路径进行设置,则可以从插件中获取相同的值。
因此,首先将NuGet添加到您的Core和Droid项目中。
在Droid项目的Setup.cs文件中,覆盖GetPluginConfiguration
:
protected override IMvxPluginConfiguration GetPluginConfiguration(Type plugin)
{
if (plugin == typeof(Cheesebaron.MvxPlugins.Settings.PluginLoader))
{
return new DroidCheeseSettingsConfiguration
{
SettingsFileName = "USER_INFO"
};
}
return base.GetPluginConfiguration(plugin);
}
然后,您可以在ViewModel中公开任何设置:
public class MyViewModel : MvxViewModel
{
private ISettings _settings;
public MyViewModel(ISettings settings)
{
_settings = settings;
}
public string FacebookId => _settings.GetValue("USER_FACEBOOK_ID", string.Empty);
}
现在,您可以将FacebookId用作绑定中的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.