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 中触发的主要内容,如果未能解决你的问题,请参考以下文章

选择器更改事件未在 Titanium 中首次触发

Ajax AutoCompleteExtender文本框未在边缘浏览器中触发文本更改事件

在每个 DOM 更改“完成”时触发 javascript 事件

触摸事件未在 UITableView 上触发

Drop 事件未在 chrome 中触发

Drop 事件未在 chrome 中触发