1

我有一个处理布尔值的转换器,并使用它们来选择两个 ImageSource 中的任何一个。我将 ImageSource 定义为转换器中的两个参数,稍后我需要使用 XAML 中的 DynamicRsource 标记扩展来提供这些资源,因此我设计了以下代码

public class BooleanToImageSourceConverter : BindableObject, IValueConverter
{
    public static readonly BindableProperty TrueImageSourceProperty = BindableProperty.Create(nameof(TrueImageSource), typeof(ImageSource), typeof(BooleanToImageSourceConverter));
    public static readonly BindableProperty FalseImageSourceProperty = BindableProperty.Create(nameof(FalseImageSource), typeof(ImageSource), typeof(BooleanToImageSourceConverter), propertyChanged: Test);

    private static void Test(BindableObject bindable, object oldValue, object newValue)
    {
        if (oldValue == newValue)
            return;

        var control = (BooleanToImageSourceConverter)bindable;
    }

    public ImageSource TrueImageSource
    {
        get => (ImageSource)GetValue(TrueImageSourceProperty);
        set => SetValue(TrueImageSourceProperty, value);
    }
    public ImageSource FalseImageSource
    {
        get => (ImageSource)GetValue(FalseImageSourceProperty);
        set => SetValue(FalseImageSourceProperty, value);
    }
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool isTrue = (bool) value;
        return isTrue ? TrueImageSource : FalseImageSource;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == TrueImageSource;
    }
}

XAML

<converters:BooleanToImageSourceConverter
    x:Key="FavImageSourceConverter"
    FalseImageSource="{DynamicResource savedToFav}"
    TrueImageSource="{DynamicResource saveToFav}" />

<ImageButton
    BackgroundColor="Transparent"
    Command="{Binding SetFavCommand}"
    HorizontalOptions="End"
    Source="{Binding IsFavorite, Converter={StaticResource FavImageSourceConverter}}" />

虽然我可以在属性更改事件中看到每当调用转换方法时都会设置一个新值,但我可以看到两个图像源都是空的。我在这里做错了吗?还是设计上不可能?

请注意,由于应用程序的一些内部原因,我不能使用触发器来执行此操作

4

0 回答 0