Создание дружественной страtagsи MVVM

Я пытаюсь создать страtagsю обработки всплывающих форм для использования в любой части моего приложения. До сих пор я понимаю, что мне понадобится один UserControl в корне моего MainWindow. Это будет связано с его собственным ViewModel, который будет обрабатывать сообщения, отправленные в приложении.

Я использую MVVM Light, и я довольно новичок в classе Messenger .

Представьте себе сценарий «Мастер / Подробнее», где список объектов содержится в ListBox . При выборе одного из этих элементов и нажатии кнопки «Редактировать» будет отображаться UserControl который охватывает весь экран. Затем пользователь может отредактировать выбранный элемент и нажать «ОК», чтобы зафиксировать изменение.

Я хочу, чтобы UserControl открыт как «общий» таким образом, что я могу на него набросить (возможно, ViewModel) … для визуализации ViewModel с помощью DataTemplate и обработки всех изменений объекта. Щелчок по ОК вызовет обратный вызов для classа отправки и сохранит изменение, как и раньше.

В некоторых ситуациях, когда это было бы полезно, …

  1. Отображать сообщения об ошибках без ввода требуемого пользователя (кроме OK, чтобы закрыть его)
  2. Отобразить форму редактирования для элемента данных
  3. Диалоги подтверждения (подобно стандартным MessageBox)

Может ли кто-нибудь предоставить какие-либо образцы кода, как я мог бы это сделать?

При разработке пользовательского интерфейса с MVVM целью является разделение проблем View с проблемами ViewModel. В идеале ViewModel не должен полагаться на какие-либо компоненты представления. Однако это илал, и другое правило MVVM заключается в том, что вы должны проектировать свое приложение по своему усмотрению.

В области, предоставляющей сервис, показывающий диалоги, есть два разных подхода: плавающий arround:

  1. Реализация DialogService в представлении (например, см. http://geekswithblogs.net/lbugnion/archive/2011/04/13/deep-dive-mvvm-samples-mix11-deepdivemvvm.aspx Пример 03).
  2. Внедрение компонента службы, который не подключен к представлению (например, см. http://blog.roboblob.com/2010/01/19/modal-dialogs-with-mvvm-and-silverlight-4/ )

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

Кроме того, оба подхода имеют свои конкретные преимущества и недостатки.

  • Первый подход также хорошо подходит для WP7, однако для него требуется общий class представления, поскольку он содержит реализацию службы представления.
  • Второй подход хорошо подходит для SilverLight и WPF и appleals, поскольку он сохраняет обслуживание отдельно от представления и не налагает никаких ограничений на представление.

Еще одно возможное решение – использовать обмен сообщениями для отображения диалогов.

Какой бы подход вы ни использовали, старайтесь, чтобы View и ViewModel не были связаны с помощью шаблона IoC (инверсия управления), то есть определите интерфейс, чтобы вы могли использовать различные реализации. Чтобы привязать сервисы к инъекции ViewModel, то есть передать службу в конструктор ViewModel или установив свойство.

Недавно я начал изучать MVVM для приложения WPF, которое я создавал, я использовал эту статью в качестве основы для отображения диалогов, если вы загружаете образец проекта, то это на самом деле довольно хороший развязанный метод, он красиво абстрагирован и позволяет вам просматривать передать экземпляр модели просмотра. Я несколько расширил его для своих собственных целей, я также использовал MessageBox WPFExtendedToolkit для предупреждений, ошибок и т. Д., Потому что стандартный win32 MessageBox неистовый.

Что касается динамических форм, тогда вы захотите исследовать элемент ItemsControl, а в ваших моделях ViewModels будет собрана коллекция элементов данных, которую пользователь должен отредактировать для привязки ItemsControl. У меня есть диалог для редактирования действий и их параметров в дизайнере системы документооборота, где диалогический список действий был полностью динамическим. Это было сделано путем отображения коллекции моих элементов с их типами данных, чтобы затем я мог использовать DataTemplateSelector для выбора DataTemplates, который содержал правильные типы элементов управления, т. Е. Тип данных DateTime показал DatePicker.

Надеюсь, это поможет

С точки зрения разработчика, входящего в «поддержание» этого общего кода, это звучит как боль. Из того, что вы описали, я бы предоставил форму и диалог одной и той же модели представления и создал конкретный шаблон XAML для диалогового windows, которое вы хотите показать.

  • Похоже, что привязки данных не обновляются
  • Как использовать IDataErrorInfo.Error в программе WPF?
  • Изображение в WPF-кнопке не отображается в режиме Runtime
  • В чем разница между свойством зависимостей и прикрепленным свойством в WPF?
  • Динамическая компоновка WPF с элементами управления и сеткой
  • Как точно встраиваемые свойства работают в WPF?
  • WPF - привязка к индексу предметов изнутри ItemTemplate of ItemsControl?
  • .Net v4 DataGridTextColumn.IsReadOnly кажется ошибочным
  • Выберите несколько элементов из DataGrid в проекте MVVM MVPM
  • Можете ли вы определить несколько TargetTypes для одного стиля XAML?
  • Имя «InitializeComponent» не существует в текущем контексте
  • Давайте будем гением компьютера.