2010-04-09 6 views
2

Je suis très impressionné par MonoTouch.Dialog par Miguel. Inspiré par son approche simple, je pensais qu'il serait très agréable d'avoir une classe basée sur la réflexion NSUserDefaults qui fonctionne de manière transparente en marquant certaines propriétés comme «persistable dans les valeurs par défaut de l'utilisateur» et oublier le reste. quelque chose comme ceci:NSUserDefaults dans monotouch

public class SomeController 
    { 
     [PersistInUserSettings] 
     public string LastPostUserRead { get; set; } 
    } 

Je n'aime pas le LastPostUserRead être de type « UserSetting », je l'aime comme une propriété normale de sorte que plus tard, je peux lui assigner comme:

LastPostUserRead = "Post 1"; 

et non comme:

LastPostUserRead.SetValue("Post 1"); 

Toute idée sur la façon de le mettre en œuvre (sans Reflection.Emit) à MonoTouch?

Répondre

1

Vous n'avez absolument pas besoin de Reflection.Emit pour définir des valeurs de façon dynamique. C'est pure System.Reflection (sans la partie "Emit").

MonoTouch.Dialog lit et stocke des valeurs dynamiquement en utilisant SetValue et GetValue à partir de FieldInfo (cela peut également être fait pour les propriétés).

+0

afaics la liaison est à sens unique (dans Dialog), si je règle la valeur d'un champ lié alors que la boîte de dialogue est affichée, l'élément UI lié à ce champ ne sera pas mis à jour. est-ce que je manque quelque chose? –

+1

Oui ali - vous devez utiliser bindingContext.Fetch(). Voir http://github.com/migueldeicaza/MonoTouch.Dialog/blob/master/Sample/DemoReflectionApi.cs pour un exemple, je ne suis pas sûr si le wiki mentionne que vous devez le faire –