在Windows Phone 8.1上,我使用的是Caliburn.Micro View 模型优先方法,但是由于 View 模型不能完全了解 View ,因此无法看到如何将MediaCapture对象绑定(bind)到 View 中的CaptureElement。

最佳答案

我有同样的问题。我在Windows Phone 8.1 WinRT(通用应用程序)中使用了MVVM Light。

我使用ContentControl并绑定(bind)到CaptureElement:

 <ContentControl HorizontalAlignment="Left"
                Width="320" Height="140" Content="{Binding CaptureElement}"/>

CaptureElement和MediaCapture是我的ViewModel中的属性:
private MediaCapture _mediaCapture;
        public MediaCapture MediaCapture
        {
            get
            {
                if (_mediaCapture == null) _mediaCapture = new MediaCapture();
                return _mediaCapture;
            }
            set
            {
                Set(() => MediaCapture, ref _mediaCapture, value);
            }
        }
        private CaptureElement _captureElement;
        public CaptureElement CaptureElement
        {
            get
            {
                if (_captureElement == null) _captureElement = new CaptureElement();
                return _captureElement;
            }
            set
            {
                Set(() => CaptureElement, ref _captureElement, value);
            }
        }

接下来,我在ViewModel的构造函数中调用ConfigureMedia():
   async void ConfigureMedia()
    {
        await MediaCapture.InitializeAsync();
        CaptureElement.Source = MediaCapture;
        await MediaCapture.StartPreviewAsync();
    }

首先初始化MediaCapture,然后设置Source,最后是StartPeview,这一点很重要。对我来说,它有效:)

08-26 15:14