MVVM, где помещать / обрабатывать события пользовательского интерфейса, такие как 'onClick' - PullRequest
0 голосов
/ 08 мая 2018

Я знаю, что это неопределенный вопрос, но я был настолько зациклен на дизайне MVP, что в течение многих лет я решил держать себя в курсе и решил рискнуть MVVM архитектурного дизайна, я был читая множество блогов, примеров и материалов о шаблоне Stream / Observer, который следует за MVVM , но что мне неясно (не могу найти очень простой код), как MVVM обрабатывает события пользовательского интерфейса? такие как onclick? в MVP представление и презентатор имеют двусторонний контракт на обработку такой вещи

// called by view
presenter.onViewButtonClicked 



void onViewButtonClicked() {

      // do something here that business logic requires
      view.doSomethingAfterPresenterReceivedClickEvent() 
}   

Я знаю, что View в MVVM подписывает на ViewModel, что когда что-то случается с данными (Модель) View будет реагировать на это

Теперь, как я могу сказать ViewModel, что я что-то нажал? (PS: я знаю, что мне нужно подписаться на ViewModel, чтобы прослушивать любые изменения, когда я что-то щелкаю) , мне просто нужны некоторые рекомендации и примеры, как я могу сказать ВМ, что я сделал что-то намеренно.

Я прочитал документацию Microsoft по MVVM, в которой что-то говорится о iCommand, что-то вроде контракта, чтобы сообщить MVVM о событии пользовательского интерфейса.

кто-нибудь просветит меня, пожалуйста ... Заранее спасибо

Редактировать: Я забыл упомянуть, я не использую DataBinding, и из-за честных плюсов и минусов, я решил не делать этого.

1 Ответ

0 голосов
/ 08 мая 2018

Я действительно не MVVM эксперт, но насколько я знаю:

Основное различие между MVP и MVVM заключается в том, что в MVP существует двустороннее соединение между view и Presenter , что означает, что Presenter знает о представление (интерфейс) , а view знает о Presenter (интерфейс) ) .

В MVVM , с другой стороны, это соединение является только одним способом, что означает, что представление знает о модели представления , но viewmodel не знает о виде (так как подключение от viewmodel к представлению выполняется через данные наблюдений). Это позволяет viewmodel быть независимым от любого представления или представления представления и позволяет одной viewmodel использоваться несколькими просмотры .

Таким образом, чтобы (наконец-то) ответить на ваш первоначальный вопрос: способы обработки событий onClick в основном одинаковы в MVP и MVVM .. в представлении уведомляет докладчика / viewmodel о событии, а затем:

  • Presenter устанавливает данные в модели и вызывает соответствующие методы в представлении MVP )
  • viewmodel устанавливает измененные данные, которые автоматически запускают реакцию на view , так как эти данные наблюдаются (в MVVM )

Надеюсь, это поможет:)

...