WedX - журнал о программировании и компьютерных науках

Платформа MVVM для Xamarin.Forms

Может ли кто-нибудь объяснить, какие преимущества предоставляет среда MVVM, такая как ReactiveUI или MVVM Light, для приложения Xamarin.Forms? мы можем реализовать INotifyPropertyChanged в наших моделях просмотра без использования какой-либо из этих платформ. Я что-то упускаю?

30.12.2015

  • Если INotifyPropertyChanged — это все, что вам нужно, то это принесет вам пользу. Эти фреймворки обычно содержат несколько хороших инструментов, таких как DI, автоматическая загрузка/привязка и многое другое. Они просто немного облегчают жизнь. 30.12.2015

Ответы:


1

Я автор небольшого фреймворка MVVM для Xamarin.Forms (https://github.com/daniel-luberda/DLToolkit.PageFactory). Я попытаюсь указать некоторые преимущества его использования, поскольку некоторые функции являются общими и для других фреймворков:

  • Готовая к использованию реализация INotifyPropertyChanged (просто наследуется от BaseViewModel или BaseModel)
  • Навигация, ориентированная на ViewModel (вы можете переместить логику навигации для просмотра моделей)
  • Встроенный обмен сообщениями для простой передачи данных/аргументов между страницами или моделями просмотра
  • Кэширование и повторное использование страниц (улучшение пользовательского интерфейса за счет повторного использования представлений/страниц)
  • Каждая страница имеет доступ к типизированному экземпляру ViewModel, который автоматически создается и подключается к BindingContext.

Эти функции различаются в зависимости от библиотеки. Некоторые из более продвинутых сред MVVM предлагают вам возможность перенести весь ваш проект на другие платформы/SDK, поскольку они поддерживают несколько платформ. Это может быть хорошей сделкой для более крупных проектов.

Пример кода для иллюстрации некоторых функций (код вызывается из ViewModel):

PageFactory.GetPageFromCache<SecondPageModel>()
    .ResetPageModel()
    .SendActionToPageModel((model) => { model.Message = "Hello World!"; })
    .PushPage();
11.01.2016

2

В MVVM Framework есть нечто большее, чем просто INotifyPropertyChanged. Чтобы привести только пару примеров, есть:

  • RelayCommand — класс, который обеспечивает реализацию интерфейса ICommand и позволяет привязать делегата к представлению. Полезно для кнопок
  • EventToCommand — позволяет привязать событие к команде в вашей модели представления. Вместо того, чтобы использовать код позади для UIElement Events

Это всего лишь два класса, предоставляемые MVVM Framework, например MVVMLight.

Использование MVVMLight означает, что вам не нужно реализовывать INotifyPropertyChanged в каждом проекте, вы просто убедитесь, что ваш ViewModel наследуется от ViewModelBase, и вам также не нужно писать свою собственную реализацию в каждом проекте для двух упомянутых выше классов.

И последнее, что следует упомянуть, это то, что вы также можете установить фрагменты кода для MVVMLight. Это означает, что код пишется ДАЖЕ быстрее!

Например, если вы хотите, чтобы свойство, которое вызывает свойство, также было изменено, просто используйте фрагмент свойства mvvmlight. Точно так же, если вам нужно свойство RelayCommand, вы можете просто использовать фрагмент mvvmlight RelayCommand

08.01.2016

3

Архитектурный шаблон Model-View-ViewModel (MVVM) был изобретен с учетом XAML. Шаблон обеспечивает отделение пользовательского интерфейса XAML (представления) от базовых данных (модели) с помощью класса, который служит посредником между представлением и моделью (представление). View и ViewModel часто связаны через привязки данных, определенные в файле XAML. BindingContext для представления обычно является экземпляром ViewModel. Нажмите здесь, чтобы просмотреть дополнительные сведения и пример кода.< /а>

Вам не нужно использовать ReactiveUI или MVVM Light, вы можете просто использовать интерфейс INotifyPropertyChanged, чтобы уведомить клиентов об изменении значения свойства. Ниже вы можете увидеть мой код класса ViewModelBase, надеюсь, что это поможет вам;

public class ViewModelBase : INotifyPropertyChanged
{
    #region INotifyPropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion
}

В моей ViewModel вот как я наследую ViewModelBase и как я создаю свое свойство;

public class ImageButtonViewModel : ViewModelBase
{
 // ...
 private string header;
 public string Header
 {
      get
      {
          return header;
       }
      set
        {
          header = value;
          OnPropertyChanged();
         }
  }
// ...
}
31.05.2016

4

Я успешно использую Askaiser.Mobile.Pillar, и Я не вижу ничего плохого, я все еще изучаю, но это стало отличным кандидатом для моих проектов. документ

Надеюсь, я помог.

Приветствие

19.04.2017

5

Простая истина заключается в том, что MVVM Frameworks (и их IOC-контейнеры) — это кратчайший путь для экономии вашего времени. Они приходятся на чрезвычайные расходы:

Они вызывают упрощенное согласование между представлениями, моделями представлений и моделями. Только одно может действительно принадлежать другому. Это не «IOC» — это жестко закодированное назначение, основанное на соглашении об именах файлов, например:

Главная страница

MainViewModel

ГлавнаяМодель

В реальном сценарии внедрения любое количество моделей может обслуживать любое количество моделей представлений при условии, что они реализуют надлежащий интерфейс. Кроме того, любое количество моделей представлений может обслуживать любое количество представлений, если эти модели представлений поддерживают интерфейс(ы) представлений.

Платформы MVVM создают классы с помощью приема отражения с использованием строкового префикса. В предыдущем примере строка «Main» позволяет нам найти страницу, модель представления и модель. Но это не переход от одной модели к другой. Это строка для просмотра навигации по модели.

Фреймворки создают классы с помощью Activator.CreateInstance, что приводит к хаосу в компоновщике времени компиляции.

Инфраструктуры создаются с использованием гипер-упрощенной логики параметров конструктора. Современные программы используют создание экземпляров как форму контроля. В этих рамках нет реального контроля.

Полный код этих замечаний находится по адресу https://github.com/marcusts/xamarin-forms-annoyances. См. решение под названием MvvmAntipattern.sln.

На сайте GitHub также есть ссылки на более подробное обсуждение этой темы.

10.04.2018
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]