2013-09-23 17 views
6

içinde bir monotouch UI öğesinin bir viewmodel boole 'etkin' özelliği nasıl bağlanır MVVMCross kullanarak giriş sayfamı IOS Droid'e yazılır.Mvvmcross

bu defa

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(); 

'KullanıcıAdı' bağlanmasının başarıyla UsernameTextField bağlanan ne var. Ancak, LoginCommand tetiklendiğinde (kısaltma için hariç tutuldu), oturum açma işlemi devam ederken, UI denetiminin 'Enabled = false' olarak ayarlanmamasını sağladım.

System.ArgumentException: Property expression must be of the form 'x => x.SomeProperty.SomeOtherProperty' 
Yazmaktan olmalıdır

yukarıda x.Enabled de çalışma zamanında bağlama başarısız kod, doğrudan 'Etkin' özelliğine bağlamak isteyen DO olarak, hatalı bağlama ve çocuk prop değil - ama bunu nasıl yapacağımı göremiyorum.

Bazı örneklerde mvvmcross'a baktım ve birkaç N + 1 videosunu inceledim ancak örnek eşleştirmeyi etkinleştirmiş gibi görünmüyor veya başka bir çocuk özelliği bağlanılamıyor.

Teşekkür

Kuralların nesi olduğunu göremiyordu

cevap

10

- ama sadece https://github.com/slodge/Enabling denenmiş ve bu işe gibiydi ...

Bu yüzden başka bir göz ... ve problem değilmi aldı 'Etkin t - bunun yerine ise: basit bir özellik ifadesi değildir

 To(x => !x.LoggingIn) 

- orada ! operatörü var. Bunun yerine böyle bir ValueConverter kullanabilirsiniz ! kullanmanın

: Sonra

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

: Çalışma şimdi çözüm kullanarak

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

. Çok fazla Linq ve yeterli mülkiyet bağlama düşünmüyordu! Teşekkürler –

İlgili konular