【问题标题】:CameraCaptureTask completed event not firing in the ViewModelCameraCaptureTask 完成事件未在 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)”事件处理程序。我在这里遗漏了什么吗?

提前致谢!

【问题讨论】:

    标签: silverlight windows-phone-7 xaml


    【解决方案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 软件运行时测试与照片选择器和相机启动器任务交互的应用程序,因为它会锁定本地媒体数据库。

    【讨论】:

    • 我做到了,但后来我改用模拟器。那也没用。
    猜你喜欢
    • 2015-04-14
    • 2019-05-18
    • 2015-11-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多