Caliburn Micro: фотографирование в манго - PullRequest
1 голос
/ 27 октября 2011

Я пытаюсь использовать средство запуска задач в WP7.1 Mango с последней версией Caliburn Micro, но мой код не перезванивается после завершения задачи. Возможно, я где-то делаю глупости, но не вижу где. Вот что я сделал для примера приложения для воспроизведения, которое вы можете скачать с:

http://www.filesonic.com/file/2750397005/PhoneTaskTest.zip

1) создать новое приложение WP7.1;

2) добавить папку Lib в решение, добавить туда CM dll и добавить ссылку на них;

3) изменить сгенерированные файлы, как указано в документации CM, и добавить загрузчик.

Теперь до этого момента все в порядке, и приложение запускается без проблем. Затем я делаю следующее:

4) добавить кнопку на главной странице в представление и соответствующий метод в ее виртуальной машине с именем TakePhoto .

5) изменить ВМ следующим образом:

a) добавить элемент readonly IEventAggregator , внедренный в конструктор;

б) добавить OnActivate / OnDeactivate переопределения, чтобы агрегатор мог подписаться и отписаться от этой виртуальной машины;

в) добавьте метод TakePhoto , который просто:

_aggregator.RequestTask<CameraCaptureTask>();

d) извлечь виртуальную машину из интерфейса IHandle > и реализовать ее:

public void Handle(TaskCompleted<CameraCaptureTask> message)
{
  if (message.Result.TaskEventArgs.TaskResult != TaskResult.OK) return;
  SetPhoto(message.Result.TaskEventArgs.ChosenPhoto);
}

Теперь, когда я нажимаю кнопку, в эмуляторе запускается задача камеры, и я могу сделать фотографию; Затем я возвращаюсь в свое приложение, но ничего не происходит, и мой метод Handle НИКОГДА не вызывается. Вы можете просто установить точку останова, чтобы подтвердить это. Итак, что я здесь делаю не так?

1 Ответ

1 голос
/ 27 октября 2011

Вам нужно обработать TaskCompleted<PhotoResult> вместо TaskCompleted<CameraCaptureTask>. Потому что Caliburn.Micro создает сообщение TaskCompleted<T> с аргументами события Completed Задачи, которое в случае CameraCaptureTask равно PhotoResult . Таким образом, вы должны реализовать IHandle<TaskCompleted<PhotoResult>> и ваш метод Handle должен выглядеть следующим образом

public void Handle(TaskCompleted<PhotoResult> message)
{
    if (message.Result.TaskResult != TaskResult.OK) return;
    SetPhoto(message.Result.ChosenPhoto);
}
...