Question

Je veux avoir une image liée à un booléen et ont la source de l'image dépend de la valeur booléenne

i.e.. véritable source = "image1" false source = "image2"

Je me demandais s'il y a une façon de le faire en ligne sans avoir besoin d'un convertisseur.

Était-ce utile?

La solution

Vous pouvez créer un style sur l'image qui utilise un DataTrigger pour échanger la source d'image en fonction d'une liaison. Dans cet exemple, l'image change en fonction de la valeur d'un booléen appelé simplement « 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>

Autres conseils

Si quelqu'un est à la recherche de Value Converter pour la liaison. Voici ce que je

<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;
    }
}

Borné Enum

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

Set Enum de ViewModel et convertisseur lier l'image appropriée.

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

Si vous êtes juste lier la propriété Image::Source directement alors la seule façon d'y arriver est avec un IValueConverter personnalisé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top