Xamarin.Forms自定义渲染器赋值string[]到BindableProperty报错如何解决
问题根因
你收到的报错是因为混淆了BindableProperty标识符和实际属性值的存储逻辑:CameraView.clipsProperty是静态的绑定属性标识对象,类型为BindableProperty,本身不能直接赋值为字符串数组,你需要操作渲染器关联的CameraView实例的Clips属性完成赋值。
另外你当前的代码还有两个不符合规范的点:
- 绑定属性字段命名应该遵循Pascal大小写规范,且要加
readonly修饰符和其他绑定属性保持一致 - 渲染器构造函数执行时还未关联到Xamarin.Forms层的
CameraView实例,此时无法对共享视图的属性赋值,需要在OnElementChanged生命周期方法中操作实例
修正后的代码
1. CameraView 代码调整
namespace Project.Renderers { public enum CameraOptions { Rear, Front } public class CameraView : View { public static readonly BindableProperty CameraProperty = BindableProperty.Create(nameof(Camera), typeof(CameraOptions), typeof(CameraView), CameraOptions.Rear); // 修正绑定属性命名,加readonly,添加双向绑定模式方便ViewModel接收变更 public static readonly BindableProperty ClipsProperty = BindableProperty.Create( nameof(Clips), typeof(string[]), typeof(CameraView), null, defaultBindingMode: BindingMode.TwoWay); public CameraOptions Camera { get { return (CameraOptions)GetValue(CameraProperty); } set { SetValue(CameraProperty, value); } } public string[] Clips { get { return (string[])GetValue(ClipsProperty); } set { SetValue(ClipsProperty, value); } } } }
2. iOS 渲染器代码调整
[assembly: ExportRenderer(typeof(CameraView), typeof(CameraViewRenderer))] namespace Project.iOS.Renderers { public class CameraViewRenderer: ViewRenderer<CameraView, NativeCameraView> { NativeCameraView uiCameraPreview; protected override void OnElementChanged(ElementChangedEventArgs<CameraView> e) { base.OnElementChanged(e); if (Control == null) { // 初始化原生相机视图逻辑 uiCameraPreview = new NativeCameraView(); SetNativeControl(uiCameraPreview); } if (e.NewElement != null) { // 给原生相机注册录制完成的回调,录制完成后给共享视图的Clips赋值 uiCameraPreview.OnRecordingFinished += (clipsPaths) => { // Element就是当前渲染器关联的Xamarin.Forms层CameraView实例 Element.Clips = clipsPaths; }; } } } }
绑定到ViewModel说明
如果需要在ViewModel中拿到录制的视频路径,直接在XAML中绑定Clips属性即可:
<renderers:CameraView Camera="Rear" Clips="{Binding RecordedVideoClips}" />
ViewModel中对应的RecordedVideoClips属性会在每次录制完成后自动收到更新的路径数组。
内容的提问来源于stack exchange,提问作者Jaime Santos
相关产品推荐
相关产品推荐

