У меня еще одна попытка использовать приложение WPF, включающее Prism & MEF, и пытаюсь лучше понять шаблон MVVM. Я делал это раньше, и, хотя у меня есть рабочее решение, которым я доволен, я не уверен, что остался верен шаблону MVVM, так как в результате я получил модели представления, раскрывающие множество обработчиков событий и код, стоящий на представления, обрабатывающие эти события. Эти события были направлены главным образом на открытие дополнительных представлений (таких как диалоговые окна редактирования) на основе выбора, сделанного в начальном представлении.
Пока (на этот раз) я создал приложение оболочки с PRISM, у меня есть несколько регионов, и я могу создавать представления и добавлять их в эти регионы. Я также использую MEF для модульного решения, а также для автоматического предоставления моделей представлений представлениям через IoC. Опять же, это работает - в точку ...
Моя проблема связана с созданием некоторых моделей представлений. До сих пор я создал модели, которые содержат списки из баз данных. Они работают, и до сих пор большая часть кода у меня есть и дополнительный конструктор с атрибутом [ImportingConstructor], который гарантирует, что я получу модель представления. Я доволен этим на данный момент (но могу посмотреть варианты позже).
Мой следующий шаг - предоставить новый вид для редактирования элемента в одном из списков (это в основном классический основной список, открывающий диалоговое окно редактирования). Вот где я не могу увидеть MVVM / MEF способ сделать что-то - я не могу найти способ передать параметр конструктору модели представления на основе текущего выбранного элемента в списке.
Я знаю, что пытаюсь быть здесь пуристом. Я также знаю, что в коде нет ничего плохого. Однако я пытаюсь понять, можно ли достичь реализации утопии.
Итак, как бы вы поступили об этом ...
Для заданного списка с выбранным элементом откройте новое представление (InteractionRequest?) С моделью представления, которая содержит либо (a) фактический элемент, выбранный в списке, либо (b) хотя бы некоторую ссылку на него, либо одно из его свойств, которое можно использовать для повторного получения элемента из хранилища данных?