2009-11-03 5 views
13

Ich möchte ein Bild zu einem boolean gebunden haben und haben die Quelle des Bildes auf dem Booleschen WertImage.Source nach Boolean ohne Konverter binden?

dh wahre Quelle = „image1“ false source = „Bild2“

Ich frage mich abzuhängen, wenn Es gibt eine Möglichkeit, dies inline zu tun, ohne einen Konverter zu benötigen.

Antwort

40

Sie können einen Stil auf dem Bild erstellen, der einen DataTrigger verwendet, um die Bildquelle abhängig von einer Bindung zu vertauschen. In diesem Beispiel ändert sich das Bild abhängig vom Wert eines Booleschen Werts, der einfach "Wert" genannt wird.

<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

Funktioniert dies für Eigenschaften eines anderen Elements? Was passiert zum Beispiel, wenn ich ein Bild basierend auf einem Wert eines Labels binden möchte? Könnten Sie das näher ausführen? – user3841581

0

Wenn Sie nur die Image::Source-Eigenschaft direkt binden, dann ist die einzige Möglichkeit, dies zu erreichen, mit einer benutzerdefinierten IValueConverter.

2

Wenn jemand Wert Converter für die Bindung sucht. Hier ist, was ich verwendet

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

Set Enum von Ansichtsmodell und Konverter wird das entsprechende Bild binden.

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

Könnten Sie bitte den ConverterParameter = \ {Status \} Teil erklären? – user3841581

+0

In meinem Fall sein ein ENUM-Wert public enum Device { Idle = 1, Offline-= 2, Active = 3, } – dnxit

+0

dnxit