2010-08-29 4 views
3

Я скоро приступаю к работе над новым проектом и буду искать советы по архитектуре от тех из вас, кто имеет опыт работы с WPF, Prism и MVVM.Призма и MVVM для нового проекта WPF

Проект, безусловно, будет WPF, и я буду внедрять MVVM (я, скорее всего, буду использовать MVVM Foundation Джоша Смита в качестве отправной точки), чтобы иметь возможность извлечь выгоду из разделения UI/логики и т. Д. Я не уверен хотя, если бы я выиграл от использования Prism, а также для структурирования моего проекта.

Позвольте мне кратко описать проект. Будет основная «панель инструментов», на которой будет отображаться ряд виджетов. Каждый виджет отображает некоторые базовые данные, связанные с его функцией, и щелчок виджета откроет новое окно, которое отобразит гораздо более подробные данные и содержит богатый пользовательский интерфейс для просмотра/редактирования данных.

Теперь я думал, что могу использовать Призм для создания проекта, но я никогда не использовал его раньше и не уверен, подходит ли он для достижения того, чего я пытаюсь достичь. Например, будет ли моя «панель инструментов» оболочкой, содержащей регионы, которые будут заполнены каждым виджетами? Будет ли каждое новое окно, отображаемое при щелчке виджета, также быть его собственной оболочкой с собственной настройкой региона? Если я смогу получить шаблон для панели инструментов и одного виджета на панели инструментов, я могу воспроизвести ее для остальных виджетов.

Помимо Prism, у меня есть вопрос о том, как MVVM должен быть реализован для определенных окон редактирования данных. Предположим, у меня есть диаграмма, которая отображает некоторые данные, и пользователь может непосредственно щелкнуть мышью/мышью на диаграмме, чтобы отредактировать данные, которые он видит. Все данные находятся в модели, и модель представления делает эти данные доступными для просмотра посредством привязки. Мой вопрос в том, где будут записываться щелчки мыши или перемещать события, которые относятся к диаграмме в этом представлении? Нам не нужно много/ничего в коде обзора, и мы не хотим иметь обработчики событий UI в модели представления, поэтому я не уверен, как обрабатывается этот тип сценария. Я знаю, что команды являются вероятным ответом здесь, но образцы MVVM, которые я видел, обычно показывают примеры команд для простых нажатий кнопок. Является ли общая идея тем же самым?

Итак, если у кого-либо есть предложения по вышеуказанным или любым общим советам по работе с WPF и MVVM/Prism, пожалуйста, дайте мне знать.

Спасибо.

+0

В этой статье используется MEF вместо Prism, но в остальном есть интересные идеи о WPF и MVVM при работе с материалами IoC: http://www.codeproject.com/KB/WPF/SoapBoxCorePinBallDemo.aspx –

ответ

4

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

Я работал над проектом с WPF, MVVM и Prism рядом с другими фреймворками. Лучшим советом является понимание силы и функциональности каждого, прежде чем склеивать все это вместе. Вам не нужно использовать все функции Prism для того, чтобы это было полезно в этой ситуации.

Для Prism можно использовать ...

  1. Shell и Загрузчик инициализацию приложения и загрузить модули из других сборок.
  2. Создайте и настройте Unity для инъекций зависимостей. Вы можете использовать другие контейнеры DI. Здесь вы можете добавить глобальные сервисы, которые будут использовать каждый модуль.
  3. Использование EventAggregator для уведомления различных частей приложения, обычно по модулю и представлениям
  4. Регионы для областей именования в пользовательском интерфейсе, чтобы модули могли добавлять представление к определенному местоположению.

Указанные выше 4 не все должны использоваться, но их можно легко интегрировать в приложение MVVM/WPF.

Например, была бы моя «панель» быть оболочку, которая содержит регионы, каждый виджет будет заселить?

Здесь вы можете создать регион, который вы создаете (вы можете получить из региона), который будет управлять кнопками на панели инструментов. (Я использовал регион в отношении ленты). Служба может быть открыта через интерфейс, который каждый модуль может предоставить команде/изображению (что у вас есть), которое при нажатии будет создавать ViewModel. Вы можете сделать это внутри Инициализации модуля.

ли каждое новое окно, которое является отображается, когда виджет щелкнул также свою собственную оболочка со своей собственной установкой области?

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

<Window ...> 
    <ContentControl Content="{Binding}" /> 
</Window> 

Где в контроллере он может это сделать ...

public void DisplayView(ViewModel vm) 
{ 
    var window = new MyWindow { DataContext = vm }; 
    window.Show(); 
} 

Контроллер может использоваться в пределах вашего модуля непосредственно из завернутые в пределах сервис ... хотя для тестирования было бы лучше использовать сервис и интерфейс. Убедитесь, что вы объединили ресурсы вашего модуля с помощью Applicaiton.Resources и используете DataTemplate, чтобы связать ваше мнение с моделью просмотра.

Мой вопрос, где будет мышь щелчок/переместить события, которые являются специфическими к графике в этой точке зрения, быть написано?

Не бойтесь кода, но вы можете в этом случае использовать поведение EventToCommand, которое будет маршрутизироваться в команду на вашей модели. MVVMLight Инструментарий имеет это, что вы можете использовать, если хотите.

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

HTH

+0

Благодарим за информацию и советы. Они высоко ценятся. – Flack

1

Я думаю, что Призма будет отлично работать для вас.

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

  1. Положите одну область с ItemsControl Создавание модулей Shell
  2. для каждого виджета
  3. Keep добавления модулей виджетов в той же области ItemsControl оболочки.

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

-> Будет ли каждое новое окно, отображаемое при щелчке виджета, также быть его собственной оболочкой с собственной настройкой региона?

Нет, вы можете использовать «WindowRegionAdapter» в оболочке для создания представлений для ваших виджетов в отдельных окнах.

-> где будут отображаться щелчки мыши или перемещать события, которые являются специфическими для диаграммы в этом представлении?

Вы можете использовать прикрепленные поведения, чтобы привязывать события в вашем представлении к командам в ViewModel исключительно в XAML. Google «Blend behaviors» или «привязанные bahaviors» для того, как вы могли бы это сделать. Для этого нет необходимости писать код.

Если честно, я пытаюсь дать вам ключевые слова, которые вы хотите найти, чтобы получить всю необходимую информацию.

+0

Спасибо. Я буду искать еще одну дополнительную информацию. – Flack

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