Хобрук: Ваш путь к мастерству в программировании

Как привязать свойство «включено» элемента пользовательского интерфейса монотач к логическому модели представления в Mvvmcross

Написание моей страницы входа в IOS Droid с использованием MVVMCross.

это то, что у меня есть до сих пор

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

Привязка «UserName» успешно привязывается к UsernameTextField. Однако, когда запускается LoginCommand (исключено для краткости), я не хочу, чтобы элемент управления пользовательского интерфейса был установлен как «Enabled = false», пока выполняется процедура входа в систему.

Приведенный выше код дает сбой во время выполнения привязки x.Enabled с

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

Должно быть, я неправильно пишу привязку, так как я ДЕЙСТВИТЕЛЬНО хочу напрямую привязываться к свойству «Включено», а не к дочерней опоре, но я не совсем понимаю, как это сделать.

Я просмотрел некоторые образцы на mvvmcross и просмотрел несколько видео N+1, но не могу найти включенного сопоставления образцов или привязки другого дочернего свойства.

Спасибо

23.09.2013

Ответы:


1

Я не мог понять, что не так с вашим кодом, но я просто попробовал https://github.com/slodge/Enabling и вроде сработало...

Итак, я еще раз посмотрел ... и проблема не в включенном, а в:

      To(x => !x.LoggingIn)

Это не простое выражение свойства — там есть оператор !.

Вместо использования ! вы можете использовать ValueConverter, например:

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

Потом:

  bindingSet.Bind(this.UsernameTextField)
            .For(x=>x.Enabled)
            .To(x => x.LoggingIn)
            .WithConversion(new InverseValueConverter(), null);
23.09.2013
  • Сейчас работаю с вашим решением. Слишком много думал о Linq и недостаточно связывал свойства! Спасибо 23.09.2013
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..