Как передать ViewModel в CodeActivity с помощью WF4 с MVVM и WPF - PullRequest
0 голосов
/ 03 февраля 2012

Я пытаюсь интегрировать мое текущее приложение WPF / MVVM в Workflow Foundation 4.0.

В настоящее время один из моих методов ViewModel вызывает мой пример CodeActivity, отправляя ему некоторые параметры.

Внутри моегоМетод выполнения CodeActivity Мне нужно вызвать некоторые методы из вызывающей ViewModel.Я хотел бы знать, что лучший способ сделать это.До сих пор я определил три возможных способа:

  1. Отправка моего экземпляра ViewModel в качестве входного аргумента моей CodeActivity
  2. Отправка моего экземпляра ViewModel через конструктор в моей CodeActivity, например общедоступная MyCodeActivity (ViewModelvm)
  3. Оберните мой CodeActivity в WorkflowApplication и отправьте мой экземпляр ViewModel в качестве расширения, используя SynchronizationContext

Пока что я протестировал варианты 2 и 3, и они, очевидно, работают хорошо.

Каков оптимальный способ сделать это, чтобы избежать таких проблем, как проблемы с синхронизацией потоков или другие?

Заранее спасибо,

Редактировать: Просто упомянутьВозможный сценарий: если пользователь выбирает значение 'X' из заданного раскрывающегося списка в моем представлении, мне нужно добавить объект childA и childB к коллекции ObservableColject, содержащейся в ParentObject, предоставляемом через открытое свойство в моей модели представления.Логика для создания дочерних объектов и добавления их к родителю находится в моей ViewModel.Но я хочу, чтобы Workflow содержал само бизнес-правило.

1 Ответ

1 голос
/ 03 февраля 2012

Почему вашему CodeActivity нужно что-то знать о конкретной модели вида? Я бы искал другое решение, которое позволит вашей деятельности поддерживать как можно большую независимость. Два варианта, которые я могу придумать вне головы:

  1. Используйте абстрактный класс или интерфейс, чтобы ваша деятельность не была привязана ни к одной модели представления, т.е. InArgument<IViewModel>
  2. Облегчение связи с использованием шаблона агрегации событий (если это возможно, если WF4, вы еще не уверены в этом?), Т. Е. Дайте активности то, что ей нужно для выполнения своей работы, и позвольте вашей модели представления прослушивать событие, чтобы получать обновления от деятельность

Не зная специфики вашего приложения, я не знаю, какой вариант будет работать лучше (или работать вообще), но я бы избегал прямой связи между данной моделью представления и данным CodeActivity.

...