2012-09-03 1 views
1

source complet pour cette question se trouve ici: https://github.com/Cheesebaron/MvvmCross.SettingsSampleMvvmCross: liaisons avec TwoWay MonoTouch.Dialog

Ma principale préoccupation réside dans le SettingsView, où je tente de lier quelques BooleanElements simples:

this.Root = new RootElement("Settings") 
      { 
       new Section("Test", string.Format("Choose to see your own location on the map.{0}Choose to allow shake gestures.{0}Choose whether you want to receive notifications.", Environment.NewLine)) 
       { 
        new BooleanElement("Show my location", ViewModel.ShowMyLocation).Bind(this, "{'Value':{'Path':'ShowMyLocation','Mode':'TwoWay'}}"), 
        new BooleanElement("Shake gestures", ViewModel.ShakeGestures).Bind(this, "{'Value':{'Path':'ShakeGestures','Mode':'TwoWay'}}"), 
        new BooleanElement("Notifications", ViewModel.Notifications).Bind(this, "{'Value':{'Path':'Notifications','Mode':'TwoWay'}}"), 
       }, 
      }; 

Mon problème réside dans le fait que les liaisons ne semblent fonctionner que dans un sens, même si je spécifie explicitement que c'est TwoWay. Les liaisons bidirectionnelles semblent fonctionner correctement sur WP7 et Android, donc je sais que le modèle de vue est correct. Mais soit il me manque du code pour les liaisons bidirectionnelles, soit quelque chose qui ne va pas ou qui manque dans le framework.

Ce problème est également présent si j'essaie avec d'autres types d'éléments tels que CheckboxElement ou StyledStringElement. Aussi mes propres éléments en ...

+0

Merci pour l'exemple. Pour l'exemple booléen, je suppose que cela doit être un bug. Peut-être que j'ai inclus la mauvaise classe dans https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious.MvvmCross.Dialog/MvxTouchDialogBindingSetup.cs - peut-être que CheckboxElement doit être BaseBooleanElement. Pour StyledStringElement, je ne suis pas sûr - je ne comprends pas vraiment comment rendre StyledStringElement modifiable? Je vais essayer de regarder ce soir quand je serai de retour devant le mac. – Stuart

+0

Ah, attendez une seconde. StyledStringElement fonctionne, mais c'est comme si la vue ne se mettait pas à jour toute seule. Donc, si vous appuyez sur la cellule, elle se met à jour. Donc, pour une raison quelconque, la cellule n'est pas avertie du changement. (Un autre problème?) – Cheesebaron

+0

Toujours en regardant ça (mise à jour de XCode et Monotouch et ...) mais avec le StyledStringElement je me demande si un redraw doit être forcé en utilisant cell.SetNeedsDisplay (et peut-être aussi cell.Backbground.SetNeedsDisplay?). Regardera cela lorsque les mises à jour sont terminées. – Stuart

Répondre

1

Après les commentaires ci-dessus, cela se sent comme cela est quelques problèmes distincts:

  • le BooleanElement n'a pas été correctement Linked dans MvxTouchDialogBindingSetup.cs - Je espère avoir maintenant résolu ce - voir ce commit - https://github.com/slodge/MvvmCross/commit/38e5f08acaffa6ac76d060d104f841f2765d234c - testé avec votre projet de test

  • le StyledStringElement peut tout simplement besoin d'un « coup de pied » pour le forcer à redessiner - donc nous devrons peut-être appeler cell.SetNeedsDisplay() - et peut-être aussi cell.Backbground.SetNeedsDisplay() - Je n'ai pas un cas de test pour cela à l'heure actuelle.

  • vos nouvelles cellules peuvent avoir besoin d'être liés à l'utilisation de nouvelles entrées de liaison dans vos Setup.cs

Merci pour avoir signalé ces problèmes - et pour le suivi avec un test. Je verrai si je peux trouver comment inclure des cas de test plus formels dans le dépôt mvx.


En tant que des travaux à venir, je voudrais également tout à fait de formaliser la relation Value et ValueChanged - Je pense qu'une règle générale peut être fournie afin que tous les éléments de valeur et ValueChanged soutiendront databinding - ajoutée en question https://github.com/slodge/MvvmCross/issues/26.