Бле, у меня тупняк...
Короче, у меня есть UserControl на окне. Он действует так:
- При нажатии на кнопку "Создать" контрола выдается модальный диалог.
- В модальном диалоге вводятся некие данные, по которым создается сущность (распространенный пример: аккаунт пользователя).
- Нажимается ОК, диалог закрывается, данные сущности сохраняются в объекте.
Есть второй контрол, который никак не связан с первым, но должен отображать уточненные данные о сущности (например, список разрешенных действий).
Прикол в том, что вся эта конструкция должна быть на WPF с использованием паттерна M-V-VM.
Т.е. XAML (View) чисто через биндинг сцеплен с классом - обработчиком команд и данных (ViewModel) и ни хрена не знает о том, что происходит в модели вида. ViewModel долбится к Model (POCO-классы, всякие адаптеры к БД и прочая лабуда, отвечающая за операции хранения данных).
Как мне перекинуть контекст (в данном случае - объект "Пользователь") в другой контрол без написания code-behind да так, чтобы эта фигня происходила автоматически при изменении контекста в другом контроле?
У меня мысль такая была:
Написать еще один класс ViewModel (типа VM главного окна), который будет связующим звеном между контролом для выбора пользователя и контролом, отображающим детализированные данные. В нем реализовать INotifyPropertyChanged и передергивать контекст при смене контекста.
Получается вот что:
ГлавноеОкноView: ВыборПользователяView + ИнформацияПользователяView. (XAML)
ГлавноеОкноViewModel: ВыборПользователяViewModel + ИнформацияПользователяViewModel. (Code, но не xamlовский codebehind).
WIN или FAIL?
з.ы.
MVVM -классная штука, когда надо отделить код от дизайна по максимуму, но куча мелких и очень похожих классов требуется, чтобы всю эту шнягу проворачивать. Потом рефакторингом обмазываться по полной придется.
Добавлено через 4 минуты
Мне все это жутко напоминает веб-программирование, которые я ниасилил по причине того, что не очень хорошо понимал то, как слабосвязанные сущности (страничная разметка + серверные скрипты PHP/JSP/ASP) обмениваются данными меду собой.
А тут вляпался по полной.
Ну и отлично.