根据布尔没有转换器绑定Image.Source?

时间:2009-11-03 14:51:28

标签: wpf binding conditional boolean-expression converters

我希望将图像绑定到布尔值,并使图像源依赖于布尔值

即。 true source =“image1”false source =“image2”

我想知道是否有办法在不需要转换器的情况下进行内联。

3 个答案:

答案 0 :(得分:45)

您可以在Image上创建一个样式,该样式使用DataTrigger根据绑定交换图像源。在此示例中,图像根据名为“Value”的布尔值的值而变化。

    <Image Width="16">
        <Image.Style>
            <Style TargetType="{x:Type Image}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Value}" Value="False">
                        <Setter Property="Source" Value="Resources/image1.png"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Value}" Value="True">
                        <Setter Property="Source" Value="Resources/image2.png"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Image.Style>
    </Image>

答案 1 :(得分:3)

如果有人正在寻找用于绑定的Value Converter。这是我用过的东西

<Image Source="{Binding Converter={StaticResource ImageConverter},ConverterParameter=\{Status\}}" />

public class StatusToImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string statusValue = parameter.ToString().ToUpper();

        if (!string.IsNullOrEmpty(statusValue))
        {
            string result = string.Empty;

            switch (statusValue)
            {
                case "IDLE":
                    result = "idle.png";
                    break;
                case "OFFLINE":
                    result = "offline.png";
                    break;
                default:
                    result = "online.png";
                    break;
            }

            var uri = new Uri("pack://application:,,,/PIE;component/Images/" + result);

            return uri;
        }

        return string.Empty;
    }

    // No need to implement converting back on a one-way binding
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DependencyProperty.UnsetValue;
    }
}

Bounded Enum

public enum DevStatus 
{ 
   Idle = 1,
   Offline = 2, 
   Active = 3, 
}

从ViewModel设置枚举,转换器将绑定适当的图像。

<Image Source="{Binding DevStatus, Converter={StaticResource ImageConverter}}" />

答案 2 :(得分:0)

如果您只是直接绑定Image::Source属性,那么实现此目的的唯一方法是使用自定义IValueConverter