2012-10-15 1 views
1

Quand je change MainMenuViewModel dans Tutorial.Core d'utiliser un dictionnaire comme celui-ci:MvvmCross vNext: MonoDroid liant Dictionnaire clé similaire à WP7

`articles Dictionnaire publics {get; ensemble; } publique ICommand ShowItemCommand {{ obtenir return new MvxRelayCommand> ((type) => DoShowItem (type.Value)); }}

public void DoShowItem(Type itemType) 
{ 
    this.RequestNavigate(itemType); 
} 

public MainMenuViewModel() 
{ 
    Items = new Dictionary<string, Type>() 
       { 
        {"SimpleTextProperty", typeof(Lessons.SimpleTextPropertyViewModel)}, 
        {"PullToRefresh", typeof(Lessons.PullToRefreshViewModel)}, 
        {"Tip", typeof(Lessons.TipViewModel)}, 
        {"Composite",typeof(Lessons.CompositeViewModel)}, 
        {"Location",typeof(Lessons.LocationViewModel)} 
       }; 
}` 

L'échantillon fonctionne comme prévu dans WP7, mais avec MonoDroid je reçois une erreur :: "MvxBind: Erreur: 2,71 problème vu lors de l'exécution obligatoire pour les articles au ItemsSource de - problème ArgumentException : pas de convertir des paramètres » parce que je pense KeyValuePair propriété clé provoque le problème:

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:local="http://schemas.android.com/apk/res/Tutorial.UI.Droid" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
      android:layout_margin="12dp" 
     android:orientation="vertical"> 
<TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="View Model:" 
     /> 
    <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      local:MvxBind="{'Text':{'Path':'Key'}}" 
     /> 
</LinearLayout> 

Merci d'avance pour votre aide.

Répondre

2

Le problème est que la mvxbindablelistview attend un objet qui prend en charge l'interface IList - donc il ne peut pas actuellement se lier à un dictionnaire.

C'est ce que nous dit 'ArgumentException: échec de la conversion des paramètres'.


Si vous souhaitez utiliser un dictionnaire, vous pouvez appliquer un convertisseur qui associe le dictionnaire à une liste()


Si vous pensez que cela est un élément manquant dans mvx - si vous Les listes de sentiments devraient se lier à n'importe quel ienumerable (ou peut-être à n'importe quelle icollection), alors s'il vous plaît connectez c'est un problème sur github.


Mise à jour - cela a été poursuivi sur https://github.com/slodge/MvvmCross/issues/38 - et le comportement est changé.

+0

Ok, je comprends l'erreur maintenant. Donc, je contourne le problème en utilisant List > au lieu du dictionnaire . – Alphapage

+0

Oui - juste regardé ceci. La motivation pour ne pas soutenir icollection et ienumerable semble bonne - fondamentalement ilist ajoute l'accès indexé de l'opérateur [] qui permet au listview de fonctionner plus efficacement qu'utilisant ienumerable. Nous pourrions ajouter un soutien innombrable, et cela permettrait une meilleure conformité avec wp7, mais cela mènerait à des listes de consultation inefficaces. – Stuart

Questions connexes