2017-10-05 11 views
0

J'ai un bouton, qui remonte, et je le lie à la commande, qui a besoin d'un paramètre. Est-il possible de passer le paramètre de commande en tant que méthode, qui obtient la chaîne?Xamarin MvvmCross lier les données comme méthode

Je veux faire quelque chose comme ça:

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

Comme vous pouvez le voir, je binded cliquez et je suis en train d'envoyer des paramètres de commande qui est maintenant évidemment une chaîne, mais puis-je envoyer un params qui est le résultat de la méthode: Application.Context.GetSharedPreferences('USER_INFO', FileCreationMode.Private).GetString('USER_FACEBOOK_ID', null) ??

Répondre

0

Ceci n'est pas possible. Il y a des façons de contourner cela. Le plus simple pourrait être de définir un ValueConverter que vous implémentez dans Android et de le faire.

Je pense qu'une meilleure option est d'ajouter une fonction à la commande, et d'appeler une interface via IoC que vous implémentez dans Android.

0

Il existe déjà quelques plugins qui utilisent des SharedPreferences en interne, vous pouvez donc les utiliser pour exposer cette chaîne que vous avez dans les préférences partagées.

Je suis l'auteur de Cheesebaron.MvxPlugin.Settings, si vous fournissez une configuration au plugin, avec le chemin USER_INFO pour vos paramètres, vous pourrez obtenir les mêmes valeurs sur le plugin.

Alors, ajoutez d'abord le NuGet à votre projet Core and Droid.

Dans le fichier Setup.cs de votre projet Droid override GetPluginConfiguration:

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

    return base.GetPluginConfiguration(plugin); 
} 

Ensuite, dans votre ViewModel vous pouvez exposer tout réglage:

public class MyViewModel : MvxViewModel 
{ 
    private ISettings _settings; 

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

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

Maintenant, vous pouvez utiliser FacebookId comme paramètre dans votre liaison à la place.