2009-11-03 3 views
13

Je veux avoir une image liée à un booléen et ont la source de l'image dépend de la valeur booléenneBind Image.Source selon Boolean sans convertisseur?

-à-dire vraie source = « image1 » source de faux = « image2 »

Je me demandais si il existe un moyen de le faire en ligne sans avoir besoin d'un convertisseur.

Répondre

40

Vous pouvez créer un style sur l'image qui utilise un DataTrigger pour permuter 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> 
+0

Est-ce que cela fonctionne pour les propriétés d'un élément différent? Par exemple, que se passe-t-il si je veux lier une image basée sur la valeur d'une étiquette, cela fonctionnera-t-il de la même manière? Pourriez-vous élaborer? – user3841581

0

Si vous associez simplement la propriété Image::Source directement, la seule façon d'y parvenir est avec un IValueConverter personnalisé.

2

Si quelqu'un recherche un convertisseur de valeur 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 le convertisseur lieront l'image appropriée.

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

pourriez-vous s'il vous plaît expliquer la partie ConverterParameter = \ {Status \}? – user3841581

+0

Dans mon cas, sa valeur enum public enum devicestatus { Idle = 1, Hors ligne = 2, Active = 3, } – dnxit

+0

dnxit