Алоха
Вы могли бы хотеть попробовать SqlDbDiff. Это может генерировать сценарии изменения. Свободный выпуск делает достаточно хорошее задание.
Я использовал EventAggregator из Prism v2 в аналогичных сценариях. В примахах хорошо то, что вы не В вашем приложении MVVM нужно использовать всю структуру. Вы можете извлечь функции EventAggregator и использовать их вместе с текущими настройками.
Я сталкивался с подобными проблемами. Вот как я их решил и почему я сделал то, что сделал.
Мое решение:
Моя MainWindowViewModel имеет свойство типа ModalViewModelBase, называемое Modal. Если моему коду требуется, чтобы определенное представление было модальным, он помещает ссылку на него в этом свойстве. MainWindowView наблюдает за этим свойством через механизм INotifyPropertyChanged. Если Modal установлен на некоторую виртуальную машину, класс MainWindowView возьмет виртуальную машину и поместит ее в окно ModalView, где соответствующий UserControl будет отображаться с помощью магии DataTemplates, окно отображается с помощью ShowDialog. ModalViewModelBase имеет свойство DialogResult и свойство IsFinished. Когда для IsFinished установлено значение true модальной виртуальной машиной, представление закрывается.
У меня также есть некоторые специальные приемы для выполнения подобных интерактивных вещей из потоков backgroundworker, которые хотят запросить ввод данных у пользователя.
Мое рассуждение:
] Принцип модальных представлений заключается в том, что другие представления отключены, а модальное окно показано. Это часть логики представления, которая, по сути, не имеет внешнего вида. Вот почему у меня есть свойство для него в MainWindowViewModel. Если бы я пошел дальше, я должен был бы сделать все остальные свойства или команды для всех других виртуальных машин в основной виртуальной машине исключениями, в то время как в модальном режиме, но я считаю это чрезмерным.
Механизм View фактически отрицает Пользователь любые другие действия, необязательно выполнять с всплывающим окном и showdialog, возможно, вы поместите модальное представление в существующее окно, но отключите все остальные или что-то еще. Эта связанная с представлением логика принадлежит самому представлению. (То, что типичный дизайнер не может кодировать эту логику, кажется второстепенным. Нам всем иногда нужна помощь.)
Вот как я это сделал. Я предлагаю это только как предложение, возможно, есть другие способы думать об этом,
I don't like most of the current suggestions for one reason or another, so I thought I would link to a nearly identical question with answers I do like:
Specifically the answer by Cameron MacFarland is exactly what I do. A service provided via an interface to provide IO and/or user interaction is the way to go here, for the following reasons:
Hope this helps.
Вы можете прочитать эту статью о MVVM. Он описывает, как контроллер может взаимодействовать с ViewModel:
http://waf.codeplex.com/wikipage?title=Model-View-ViewModel%20Pattern&ProjectName=waf