【问题标题】:Xamarin MvvmCross bind data as methodXamarin MvvmCross 绑定数据作为方法
【发布时间】:2017-10-05 11:31:22
【问题描述】:

我有一个按钮,可以返回,我将它绑定到命令,需要一个参数。是否可以将命令参数作为获取字符串的方法传递?

我想做这样的东西:

<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" />

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

【问题讨论】:

    标签: c# xamarin xamarin.android mvvmcross


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      已经有一些插件在内部使用 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 作为绑定中的参数。

      【讨论】:

        猜你喜欢
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多