Bind Image.Source в соответствии с Boolean без конвертера?
Я хочу, чтобы изображение было привязано к логическому и чтобы источник изображения зависел от логического значения
то есть. true source = "image1" false source = "image2"
Мне было интересно, есть ли способ сделать это inline без необходимости в конвертере.
Ответы
Ответ 1
Вы можете создать стиль на изображении, который использует 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>
Ответ 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;
}
}
Ограниченный Enum
public enum DevStatus
{
Idle = 1,
Offline = 2,
Active = 3,
}
Установите Enum из ViewModel, и конвертер привяжет соответствующее изображение.
<Image Source="{Binding DevStatus, Converter={StaticResource ImageConverter}}" />
Ответ 3
Если вы просто привязываете свойство Image::Source
напрямую, то единственный способ выполнить это - с помощью IValueConverter
.