Xamarin表格:具有可约束性属性的ImarkuPextension不起作用



绑定对于图像标签不起作用。当我调试时,我看到扩展类中源的价值始终是无效的吗?但是标签的内容不是null。

XAML

<Label Text="{Binding Image}" />
<Image Source="{classes:ImageResource Source={Binding Image}}" />

ImagerEsourceextension

// You exclude the 'Extension' suffix when using in Xaml markup
[Preserve(AllMembers = true)]
[ContentProperty("Source")]
public class ImageResourceExtension : BindableObject, IMarkupExtension
{
    public static readonly BindableProperty SourceProperty = BindableProperty.Create(nameof(Source), typeof(string), typeof(string), null);
    public string Source
    {
        get { return (string)GetValue(SourceProperty); }
        set { SetValue(SourceProperty, value); }
    }
    public object ProvideValue(IServiceProvider serviceProvider)
    {
        if (Source == null)
            return null;
        // Do your translation lookup here, using whatever method you require
        var imageSource = ImageSource.FromResource(Source);
        return imageSource;
    }
}

当然不会!

不是因为您从BindableObject继承了您的对象具有BindingContext集。没有BindingContext,就无法解决{Binding Image}

您在这里寻找的是转换器

class ImageSourceConverter : IValueConverter
{
    public object ConvertTo (object value, ...)
    {
        return ImageSource.FromResource(Source);
    }
    public object ConvertFrom (object value, ...)
    {
        throw new NotImplementedException ();
    }
}

然后,您将此转换器添加到XAML root Element Resources(或Application.Resources并将其用于绑定

<Label Text="{Binding Image}" />
<Image Source="{Binding Image, Converter={StaticResource myConverter}}" />

最新更新