2009-11-03 5 views
13

Я хочу, чтобы иметь образ, связанный с булевым и есть источник изображения зависит от логического значенияBind Image.Source в соответствии с Boolean без конвертера?

т.е. истинного источник = «image1» ложный источник = «image2»

мне было интересно, если есть способ сделать это inline без необходимости в конвертере.

ответ

40

Вы можете создать стиль на изображении, который использует 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> 
+0

Работает ли это для свойств разных элементов? Например, что, если я хочу привязать изображение на основе значения метки, будет работать одинаково? Не могли бы вы уточнить? – user3841581

0

Если вы просто связываете недвижимость Image::Source, то единственный способ сделать это - с помощью специального IValueConverter.

2

Если кто-то ищет конвертер значений для привязки. Вот что я использовал

<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 из ViewModel и преобразователя будет связывать соответствующее изображение.

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

не могли бы вы объяснить раздел ConverterParameter = \ {Status \}? – user3841581

+0

В моем случае его значение перечисления общественного перечисление DeviceStatus { Idle = 1, Offline = 2, Active = 3, } – dnxit

+0

dnxit

 Смежные вопросы

  • Нет связанных вопросов^_^