繁体   English   中英

Xamarin MvvmCross交叉绑定数据作为方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM