CameraCaptureTask 完成事件未在 ViewModel 中触发
Posted
技术标签:
【中文标题】CameraCaptureTask 完成事件未在 ViewModel 中触发【英文标题】:CameraCaptureTask completed event not firing in the ViewModel 【发布时间】:2012-03-06 06:04:08 【问题描述】:我有一个简单的应用程序,它有一个带有按钮的单页,该按钮在 Windows Phone 7 中调用 CameraCaptureTask。我为此使用了 MVVM 模式。我背后的代码很干净,我已经使用行为将按钮单击响应卸载到 ViewModel。我的代码如下所示:
public class MainViewModel : ViewModelBase
private readonly CameraCaptureTask cameraCaptureTask;
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
if (IsInDesignMode)
// Code runs in Blend --> create design time data.
else
cameraCaptureTask = new CameraCaptureTask();
cameraCaptureTask.Completed += cameraCaptureTask_Completed;
CaptureCommand = new RelayCommand(() => CaptureImage());
public RelayCommand CaptureCommand get; set;
private void cameraCaptureTask_Completed(object sender, PhotoResult e)
if (e == null || e.TaskResult != TaskResult.OK)
return;
else
// TODO
private object CaptureImage()
cameraCaptureTask.Show();
return null;
现在,当我运行我的应用程序并点击绑定到“CaptureCommand”RelayCommand 的按钮时,我在“CaptureCommand()”方法中点击了断点,它触发了 CameraCaptureTask 的“Show()”方法,导致我的相机成功出现在设备上。但是,一旦我完成拍照并点击“接受”,就永远不会调用“cameraCaptureTask_Completed(object sender, Photoresult e)”事件处理程序。我在这里遗漏了什么吗?
提前致谢!
【问题讨论】:
【参考方案1】:为什么你只有表演才转播这个?
尝试将 cameraCaptureTask 移出构造函数并进入调用的方法
【讨论】:
做到了,谢谢!我只是在玩弄不同的方法来保持代码尽可能干净。这可能是一个蹩脚的问题,但是,为什么在 ViewModel 的构造函数中实例化该对象是不够的? 我相信这是因为相机尚未“加载”。在 Loaded 事件被触发之前,UI/组件不会被加载/可用【参考方案2】:当您使用调试器和连接的设备执行此操作时,您是否使用 WPConnect 工具?
http://msdn.microsoft.com/en-us/library/gg180729(v=VS.92).aspx
Windows Phone 连接工具允许您在不运行 Zune 软件的情况下与设备建立串行或 USB 连接。当您在物理 Windows Phone 设备上测试应用程序时,Zune 软件通常正在运行。但是,您无法在 Zune 软件运行时测试与照片选择器和相机启动器任务交互的应用程序,因为它会锁定本地媒体数据库。
【讨论】:
我做到了,但后来我改用模拟器。那也没用。以上是关于CameraCaptureTask 完成事件未在 ViewModel 中触发的主要内容,如果未能解决你的问题,请参考以下文章
Ajax AutoCompleteExtender文本框未在边缘浏览器中触发文本更改事件