2013-09-23 13 views
6

Zapisywanie strony logowania w IOS Droid przy użyciu MVVMCross.Jak powiązać właściwość "enabled" elementu interfejsu Monotouch z boolowiskiem viewmodel w Mvvmcross

to, co mam tak daleko

var bindingSet = this.CreateBindingSet<LoginPageView, LoginPageViewModel>(); 
bindingSet.Bind(this.UsernameTextField).To(x => x.UserName).TwoWay(); 
bindingSet.Bind(this.UsernameTextField).For(x=>x.Enabled).To(x => !x.LoggingIn); 
bindingSet.Apply(); 

Wiązanie 'username' skutecznie wiąże się z UsernameTextField. Jednakże, gdy wywoływana jest komenda LoginCommand (wykluczona dla zwięzłości), chcę, aby kontrolka UI była ustawiona jako "Enabled = false", podczas gdy procedura logowania jest w toku.

Powyższy kod nie powiedzie się w czasie wykonywania na x.Enabled wiązania z

System.ArgumentException: Property expression must be of the form 'x => x.SomeProperty.SomeOtherProperty' 

muszę pisać wiązanie nieprawidłowo, tak jak ja chcą wiązać się z „Włączone” nieruchomości bezpośrednio i nie jest rekwizytem dziecięcym - ale nie mogę zobaczyć, jak to zrobić.

Rozejrzałem się po kilku próbkach na mvvmcross i obejrzałem kilka filmów N + 1, ale nie mogę znaleźć dopasowania próbkowania włączonego lub innego powiązania właściwości podrzędnej.

Dzięki

Odpowiedz

10

nie mogłem zobaczyć, co było złego w kodzie - ale ja tylko starałem https://github.com/slodge/Enabling i wydawało się, że do pracy ...

Więc wziąłem inny wygląd ... i ISN problemu „t w Enabled - zamiast tego znajduje się w:

 To(x => !x.LoggingIn) 

nie jest to proste wyrażenie właściwość - nie ma to operatorowi ! tam.

Zamiast ! można użyć ValueConverter jak:

public class InverseValueConverter : MvxValueConverter<bool, bool> 
    { 
     protected override bool Convert(bool value, ...) 
     { 
      return !value; 
     } 
    } 

Następnie:

bindingSet.Bind(this.UsernameTextField) 
      .For(x=>x.Enabled) 
      .To(x => x.LoggingIn) 
      .WithConversion(new InverseValueConverter(), null); 
+0

robocza teraz przy użyciu rozwiązanie. Myślałem za dużo Linq i za mało powiązań własności! Dzięki –

Powiązane problemy