【问题标题】:Caliburn Micro: taking photo in MangoCaliburn Micro:在 Mango 中拍照
【发布时间】:2011-10-27 07:21:54
【问题描述】:

我正在尝试将 WP7.1 Mango 中的任务启动器与最新版本的 Caliburn Micro 一起使用,但任务完成后我的代码不会被回调。可能我在某处做一些愚蠢的事情,但我看不到在哪里。这是我为您可以下载的示例重现应用程序所做的:

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

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

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

3) 按照 CM 文档的说明更改生成的文件并添加引导程序。

到目前为止,一切正常,应用程序启动时没有问题。然后我执行以下操作来拍照:

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

5) 如下更改虚拟机:

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

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

c) 添加 TakePhoto 方法,即:

_aggregator.RequestTask<CameraCaptureTask>();

d) 从接口 IHandle> 派生 VM 并实现它:

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

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

【问题讨论】:

    标签: windows-phone-7 caliburn.micro


    【解决方案1】:

    您需要处理TaskCompleted&lt;PhotoResult&gt; 而不是TaskCompleted&lt;CameraCaptureTask&gt;。因为 Caliburn.Micro 使用任务的Completed 事件的事件参数创建TaskCompleted&lt;T&gt; 消息,在CameraCaptureTask 的情况下是PhotoResult。所以你应该实现IHandle&lt;TaskCompleted&lt;PhotoResult&gt;&gt;,你的Handle方法应该是这样的

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

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 2012-10-24
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多