Вопрос о дизайне WPF (пользовательский контроль или mvvm) - PullRequest
3 голосов
/ 21 августа 2009

Вот сценарий:

  • У меня есть изображение, отображающее некоторые данные
  • Данные к визуалу могут поступать одним из двух способов
    1. через пользовательский ввод с клавиатуры или мыши
    2. Через какой-то бэкэнд-источник
  • Оба этих ввода данных могут иметь одну из двух форм
    1. Контрольные данные или
    2. Необработанные данные для простого отображения
  • Контрольные данные вызывают изменения в визуальном
  • Необработанные данные просто отображаются как

Другими словами, представление обслуживается двумя мастерами, а именно пользовательским вводом и внутренним вводом. Примером может служить многопользовательская игра, визуализация которой контролируется пользовательским вводом но могут также иметь те же визуальные элементы, управляемые некоторыми входными данными бэкэнда (скажем, tcp / ip). Другим примером может быть эмулятор терминала, который получает пользовательские данные, но также получает данные из другого источника, будь то телнет или серийный номер и т. д.

Я думал о написании пользовательского элемента управления WPF для визуала. Другими словами, это черный ящик, который будет интерпретировать входные данные и отображать результаты. Ввести пользовательский ввод в этот пользовательский элемент управления легко, так как можно слушать соответствующие события и обрабатывать их по мере необходимости. Тем не менее, как можно слушать входы от бэкэнда? Предоставление свойства зависимости, к которому привязка не приводит смысл, но показ метода на визуале, который вызывается с данными, также не делает смысл.

Другим выбором является архитектура MVVM, в которой Модель является источником внутренних данных. и модель представления делает всю работу. Он получает как данные бэкэнда (через модель) и пользователь вводит (через соответствующие привязки команд или некоторые другие), и это делает соответствующий смысл и привязывается к представлению, чтобы отобразить эти изменения.

Преимущество пользовательского элемента управления состоит в том, что его можно использовать как элемент управления, который заботится о себе, так что потребитель должен сделать очень мало работы, чтобы использовать его но проблема заключается в получении данных из бэкэнда. Преимущество метода MVVM заключается в том, что он аккуратно инкапсулирует логику обработки, представление и т. Д. Проблема в том, что этот шаблон должен повторяться для каждого бэкэнда. Таким образом, делая визуальный очень голые кости и разоблачение всей логики обработки вне контроля. В основном хочу чтобы было очень легко потреблять, чтобы кто-то мог взять его и использовать без добавления слишком много внешней логики для обработки и т. д. Все, что они предоставляют, - это их внутренние данные источник, который подает в визуал.

Извините за длинное сообщение, но я изучаю WPF, и это интересный дизайн. вопрос для меня. Все идеи, комментарии и т. Д. Приветствуются.

Спасибо за чтение.

Ответы [ 2 ]

5 голосов
/ 21 августа 2009

Я бы определенно использовал шаблон MVVM. Вы получаете очень хорошее разделение проблем в своем коде, и ваша view-модель также может быть протестирована вне пользовательского интерфейса. Вы также можете редактировать свое представление в Blend. Я не думаю, что подключить view-модель к бэкэнду сложнее, чем подключить пользовательский элемент управления. Вы можете решить использовать внедрение зависимостей или сервисный локатор для соединения вещей. Используя все эти шаблоны проектирования, вы получаете более изолированное и тестируемое решение.

0 голосов
/ 05 марта 2012

Мне бы хотелось узнать больше о CustomControls, но в то же время я думаю, что лучший вариант - использовать UserControl в качестве DataTemplate:

http://www.codeproject.com/Articles/28060/WPF-UserControl-DataTemplate

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