Что делать с командой родительского представления, которая управляет дочерним представлением, и моделирование представления будет утомительным или не требуется? - PullRequest
1 голос
/ 26 августа 2011

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

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

Команда инициируется из родительского представления, но влияет на детский взгляд.Я могу придумать несколько способов справиться с этим.

  • Добавить обработчик событий в родительский элемент, каким-то образом найти нужного дочернего элемента (не уверен, как это сделать в Silverlight), а затем выполнить всю логику, которую яneed.
  • Обрабатывать событие в родительском объекте, но повторно вызывать другое событие (двойная отправка).В дочернем элементе обработайте второе событие и выполните логику.
  • Свяжите команду с родителем и обработайте логику в самой команде (или в предоставленном делегате родительского представления).
  • Привязать команду к дочернему представлению напрямую.В этом случае, как мне указать привязку в xaml родительского представления к правому дочернему представлению / элементу управления?
  • Привязать команду к модели представления дочернего представления, как определено выше.

Что мне делать?

1 Ответ

1 голос
/ 27 августа 2011

Правило «No-Code-Behind» для MVVM не предназначено для применения к коду, связанному только с пользовательским интерфейсом, таким как настройка фокуса, запуск анимации, настройка размеров и т. Д. Так что в вашем случае я бы поместите код за вашими представлениями, и просто укажите один вид на другой.

Если ваш код Business Logic остается в ваших ViewModels, а ваш код Presentation / UI остается за вашими представлениями, вы в порядке.

...