2009-05-28 2 views
1

Я понимаю, что в шаблоне MVVM ViewModel ничего не должен знать о просмотре.Каков наилучший способ для ViewModel для управления представлением?

Так что, кажется, два способа что ViewModel может причиной что-то особенное должно произойти на UI, рассмотреть этот общий поток событий:

  • типов пользователей что-то в текстовое поле
  • пользователь нажимает кнопку
  • кнопка вызывает делегатCommand под названием «Сохранить» на viewmodel
  • вид модели сохраняет текст из текстового поля
  • , если все идет хорошо во время сохранения, модель вид меняет INotifyPropertyChanged свойство SaveStatus к «Преемник»

Теперь в представлении, у меня есть два пути, чтобы позволить это изменение оказывают влияние на Пользовательский интерфейс:

  • в представлении не может быть TextBlock, который имеет конвертер на нем, который преобразует текст SaveStatus на фразу, как «спасбросков s ucceeded «.
  • в представлении не может быть Trigger, который проверяет, является ли SaveStatus = «Преемник», и если да, то ряд сеттеров изменения пользовательского интерфейса надлежащим образом (скрывая элементы, изменяя тексты, изменение цвета и т.д.)

Является ли это основной поток информации от видового для просмотра, которые вы используете в своих приложениях?

ответ

1

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

0

Мы используем вид модели шаблона контроллера, так это выглядит следующим образом:

  • типов пользователей что-то в текстовое поле
  • пользователь нажимает кнопку сохранить
  • вид сообщает контроллеру для сохранения данных
  • контроллер сообщает представление для извлечения данных
  • контроллер сохраняет данные модели
  • с ontroller сигнализируя мнение, что спасти удалось
  • вид показывает «спасброска удалось»

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

0

Это основной поток информации из ModelView для просмотра, который вы используете в своих приложениях?

Да. Мы используем INotifyPropertyChanged почти исключительно для изменений с ViewModel до представления. Там, где взаимодействие немного сложнее, мы используем другие события, которые просматривает View.

Вместо свойства сообщения SaveStatus у нас есть HasChanges boolean в EditableAdapter, который обертывает наш POCO и обеспечивает фиксацию/откат изменений, а также другие рассчитанные свойства. Затем мы можем привязать наши представления к этому HasChanges, чтобы, например, мы могли отобразить имя документа с помощью * в конце, чтобы показать, что оно имеет изменения, или использовать HasChanges для отключения/включения кнопки «Сохранить».

Смежные вопросы