将URL绑定到自定义SVG容器的BindableProperty

时间:2019-10-09 19:24:03

标签: xamarin.forms

我一直在使用代码布局here为Xamarin Forms项目创建SVG容器。它运作良好,我将其重新配置为从远程URL读取图像。

ResourceId来自以上来源:

        public static readonly BindableProperty SvgUriProperty = BindableProperty.Create(
            "ResourceId",
            typeof(string),
            typeof(SvgUriContainer),
            default(string),
            propertyChanged: RedrawCanvas);


        public string ResourceId
        {
            get => (string)GetValue(SvgUriProperty);
            set => SetValue(SvgUriProperty, value);
        }

但是我似乎无法在运行时在XAML中绑定该URL:

    <control:SvgUriContainer 
        Grid.Row="0"
        Grid.RowSpan="4"
        Grid.Column="0"
        ResourceId="{Binding StampUri}" 
        [...]
    />

该Binding返回一个字符串,其余的绑定工作正常。任何以这种方式进行绑定的尝试都会导致生成错误:

No property, bindable property, or event found for 'ResourceId', or mismatching type between value and property.

无论我在容器逻辑中使用BindableProperty做什么,错误都是相同的,并且在XAML中。我在XAML中语法是否错误?是因为Binding在构建时是BindingExtension(不是字符串)吗?

注意:如果我将绑定替换为字符串/ URL,则一切正常。

注意:如果我将ResourceId的类型设置为object,我可以解决构建错误,但是字符串不能解析。

1 个答案:

答案 0 :(得分:1)

您能否尝试将您的bindableProperty修改为document中所述的标准格式:

  public static readonly BindableProperty SvgUriProperty = BindableProperty.Create(
      "SvgUri",
      typeof(string),
      typeof(EventToCommandBehavior),
      "test",
      propertyChanged: RedrawCanvas);


    public string SvgUri
    {
        get => (string)GetValue(SvgUriProperty);
        set => SetValue(SvgUriProperty, value);
    }

Xamarin需要属性命名约定。