Должны ли визуальные эффекты быть реализованы в View или ViewModel? - PullRequest
0 голосов
/ 31 марта 2020

Я разрабатываю свое первое приложение, используя Xamarin.Forms и FreshMVVM в качестве архитектуры, и у меня все еще есть некоторые проблемы при понимании MVVM, более конкретно, где следует обрабатывать анимацию, во View или в ViewModel ?. Я понимаю, что для событий, которые требуют использования модели, переходы между представлениями и другими вещами, которые не связаны строго с пользовательским интерфейсом, обрабатываются в ViewModel с помощью привязок и команд. Но ViewModel обрабатывает все события? Что если события только изменяют внешний вид пользовательского интерфейса? Например, изменяя BackgroundColor кнопки при ее нажатии, в этом сценарии backgroundColor следует изменить в событии Clicked () в выделенном коде представления или в команде ViewModel? Или, если я хочу создать анимацию при исчезновении представления, следует ли мне реализовать ее в событии OnDisappearing () в кодовом представлении представления или в ViewModel?

Я пытался найти ответ, но у меня есть Я не смог экстраполировать свои объяснения MVVM на этот конкретный c сценарий, поэтому я был бы признателен за объяснение. Это все, спасибо всем за потраченное время.

Ответы [ 2 ]

3 голосов
/ 31 марта 2020

Большая часть шаблона MVVM открыта для интерпретации.

В большинстве проектов наступает момент, когда время, необходимое для принудительного строгого разграничения работы между ViewModel и поведением View, может быть вредным для временных масштабов.

Лично я гарантирую, что все бизнес-логи c хранятся строго в пределах ViewModel и Model, цель состоит в том, чтобы система все еще работала, даже если пользовательский интерфейс был заменен кодом.

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

Иногда, хотя вы может потребоваться, чтобы ViewModel управлял только некоторыми данными, чтобы представление могло их представить.

Это, на мой взгляд, прагматично, приемлемо, НО ViewModel НИКОГДА не должен ссылаться на элементы управления UI напрямую, только представлять данные.

В случае запуска анимации или событий в интерфейсе, я лично не У меня есть проблема с наличием свойства ViewModel, которое используется для этой цели, хотя некоторые могут утверждать иначе.

В упомянутых вами примерах я думаю, что все это может быть выполнено в коде или с использованием преобразователей в xaml.

1 голос
/ 31 марта 2020

MVVM предназначен для поддержки чистоты кода и отделения бизнес-логики c от пользовательского интерфейса.

Сохраняйте пользовательский интерфейс для просмотра в максимально возможной степени, если только это не зависит от бизнес-логики или не указывает на нее c значение.

Переход к сценарию ios, указанному в запросе.

Изменение BackgroundColor при нажатии кнопки => Например, если цвет указывает значение в бизнесе logi c как Value < 0, затем привязать Value к BackgroundColor использовать конвертер. Но если это не имеет никакого отношения к бизнес-логике c, лучше написать код изменения цвета в коде позади файла.

Анимация на странице исчезла => Анимация навигации, насколько я знаю, не могла зависеть от бизнес-логики c. Следовательно, лучше держать его в коде позади себя.

Комментарий для любых запросов ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...