根据绑定值更改元素属性

时间:2016-07-01 19:36:13

标签: c# xaml uwp

我需要根据绑定对象中的值更改Image元素的属性。

我有一个图片元素:

>>> import os
>>> paths = "/usr/local/sa/ftp/collectorftp/AVideoP05D20160608000020E310.txt.gz, /usr/local/sa/ftp/collectorftp/AHTTPP05D20160608000008E307.txt.gz, /usr/local/sa/ftp/collectorftp/AVideoP05D20160608000122E322.txt.gz".split(", ")
>>> map(os.path.basename, paths)
['AVideoP05D20160608000020E310.txt.gz', 'AHTTPP05D20160608000008E307.txt.gz', 'AVideoP05D20160608000122E322.txt.gz']

如果<Image Source="{Binding Thing.Url}" Stretch="UniformToFill" HorizontalAlignment="Left"/> ,那么我想将Thing.OtherProperty = true添加到Image元素。

注意,Image元素位于DataTemplate中,用于应用程序的各个位置。

实现这一目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:4)

这是您使用Binding Converter

的地方

在您的情况下,您希望根据布尔值更改HorizontalAlignment属性。 您首先需要编写一个实现IValueConverter的类,您将在其中编写转换逻辑:

public class AlignmentConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if ((bool)value)
            return Windows.UI.Xaml.HorizontalAlignment.Center;

        return Windows.UI.Xaml.HorizontalAlignment.Left;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

*如果您将此绑定到非布尔值的属性,您可能需要更好地处理错误

要使用此功能,您需要在页面顶部导入您的隐蔽名称空间

xmlns:converters="using:*yournamespace*"

...将转换器声明为资源:

<converters:AlignmentConverter x:Key="HorizontalAlignmentConverter"/>

...并将其用作绑定中的参数

<Image Source="{Binding Thing.Url}" Stretch="UniformToFill" HorizontalAlignment="{Binding Thing.OtherProperty, Converter={StaticResource HorizontalAlignmentConverter}"/>