Windows phone 7 Caliburn Micro:在芒果中拍照

Windows phone 7 Caliburn Micro:在芒果中拍照,windows-phone-7,caliburn.micro,Windows Phone 7,Caliburn.micro,我正在尝试将WP7.1 Mango中的任务启动器与最新版本的Caliburn Micro一起使用,但是一旦任务完成,我的代码就不会被调用。也许我在某个地方做了些傻事,但我看不到在哪里。以下是我为一个示例复制应用程序所做的工作,您可以从以下网站下载: 1) 创建一个新的WP7.1应用程序 2) 在解决方案中添加Lib文件夹,添加cmdll,并添加对它们的引用 3) 按照CM文档的规定更改生成的文件,并添加引导程序 现在,到目前为止,一切正常,应用程序开始时没有问题。然后,我会按照以下步骤拍照:

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

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

2) 在解决方案中添加Lib文件夹,添加cmdll,并添加对它们的引用

3) 按照CM文档的规定更改生成的文件,并添加引导程序

现在,到目前为止,一切正常,应用程序开始时没有问题。然后,我会按照以下步骤拍照:

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

5) 按如下方式更改VM:

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

b) 添加OnActivate/OnActivate覆盖以允许聚合器订阅和取消订阅此VM

c) 添加TakePhoto方法,它只是:

_aggregator.RequestTask<CameraCaptureTask>();
\u aggregator.RequestTask();
d) 从接口IHandle派生VM并实现它:

public void Handle(TaskCompleted<CameraCaptureTask> message)
{
  if (message.Result.TaskEventArgs.TaskResult != TaskResult.OK) return;
  SetPhoto(message.Result.TaskEventArgs.ChosenPhoto);
}
公共无效句柄(任务已完成消息)
{
if(message.Result.TaskEventArgs.TaskResult!=TaskResult.OK)返回;
SetPhoto(message.Result.TaskEventArgs.ChosenPhoto);
}
现在,当我点击按钮时,相机任务在模拟器中启动,我可以拍照;然后我被带回我的应用程序,但什么也没发生,我的Handle方法也没有被调用。您可以在那里放置一个断点来确认这一点。
那么,我做错了什么?

您需要处理
TaskCompleted
而不是
TaskCompleted
。因为Caliburn.Micro使用任务的
Completed
事件的事件args创建
TaskCompleted
消息,该事件发生在
CameraCaptureTask
的情况下。所以您应该实现
IHandle
,您的Handle方法应该如下所示

public void Handle(TaskCompleted<PhotoResult> message)
{
    if (message.Result.TaskResult != TaskResult.OK) return;
    SetPhoto(message.Result.ChosenPhoto);
}
公共无效句柄(任务已完成消息)
{
if(message.Result.TaskResult!=TaskResult.OK)返回;
SetPhoto(message.Result.ChosenPhoto);
}

您需要处理
TaskCompleted
而不是
TaskCompleted
。因为Caliburn.Micro使用任务的
Completed
事件的事件args创建
TaskCompleted
消息,该事件发生在
CameraCaptureTask
的情况下。所以您应该实现
IHandle
,您的Handle方法应该如下所示

public void Handle(TaskCompleted<PhotoResult> message)
{
    if (message.Result.TaskResult != TaskResult.OK) return;
    SetPhoto(message.Result.ChosenPhoto);
}
公共无效句柄(任务已完成消息)
{
if(message.Result.TaskResult!=TaskResult.OK)返回;
SetPhoto(message.Result.ChosenPhoto);
}