Caliburn Micro:在Mango拍照

时间:2011-10-27 07:21:55

标签: windows-phone-7 caliburn.micro

我正在尝试使用最新版本的Caliburn Micro在WP7.1 Mango中使用任务启动器,但是一旦任务完成,我的代码就不会被回调。可能我在某个地方做了一些蠢事,但我看不到哪里。以下是我可以从以下网站下载的示例复制应用程序所做的:

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

1)创建一个新的WP7.1应用程序;

2)在解决方案中添加一个Lib文件夹,添加CM dll,并添加对它们的引用;

3)更改CM文档指定的生成文件并添加引导程序。

现在到目前为止一切正常,应用程序启动时没有任何问题。然后我做了以下拍照:

4)在主页面中为视图添加一个按钮,在其VM中添加一个名为 TakePhoto 的相应方法。

5)按如下方式更改VM:

a)添加一个在构造函数中注入的只读 IEventAggregator 成员;

b)添加 OnActivate / OnDeactivate 覆盖,让聚合器订阅并取消订阅此VM;

c)添加 TakePhoto 方法:

_aggregator.RequestTask<CameraCaptureTask>();

d)从接口 IHandle&lt; TaskCompleted&lt; CameraCaptureTask&gt;&gt; 派生VM并实现它:

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

现在,当我点击按钮时,相机任务在模拟器中启动,我可以拍照;然后我回到我的应用程序,但没有任何反应,我的Handle方法永远不会被调用。您可以在那里放置一个断点来确认这一点。 那么,我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您需要处理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);
}