在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,这一点很重要。对我来说,它有效:)