У меня есть List<Employee>
. У каждого сотрудника есть байт [], хранящий изображение (или ноль). Мне нужно как-то привязать этот байтовый массив к элементу управления изображением в шаблоне контента, который я использую, или, если у сотрудника нет изображения, я хочу отобразить локальный файл jpg. Я придумал способ определить конвертер, который будет возвращать либо BitmapImage (тип возврата из метода GetImageFromByteArray ()), либо строку (путь к имени файла). Это, очевидно, означает, что этот метод способен возвращать два типа, но я бы не подумал, что это было проблемой, поскольку я указал тип возвращаемого значения как объект.
В любом случае, вот мой C #:
public class GuidToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Guid id = new Guid(value.ToString());
Employee employee = Employees.SingleOrDefault(o => o.Id.Equals(id));
return employee.Picture != null ? GetImageFromByteArray(employee.Picture) : "/Resource/images/silhouette.jpg";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
И используется в XAML примерно так:
<local:GuidToImageConverter x:Key="GuidToImageConverter"/>
<local:OrientedGroupHeaderContentTemplateSelector x:Key="GroupHeaderContentTemplateSelector">
<!-- Default templates: -->
<local:OrientedGroupHeaderContentTemplateSelector.HorizontalMonthViewDateTemplate>
<DataTemplate>
<Image Width="60" Height="60" Margin="5 0 10 0" HorizontalAlignment="Left" Stretch="UniformToFill" Source="{Binding Path=Name.Id, Converter={StaticResource GuidToImageConverter}, ConverterParameter=1}" />
</DataTemplate>
</local:OrientedGroupHeaderContentTemplateSelector.HorizontalMonthViewDateTemplate>
</local:OrientedGroupHeaderContentTemplateSelector>
Ошибка:
"Ошибка 1 - Тип условного выражения не может быть определен, поскольку не существует неявного преобразования между 'System.Windows.Media.Imaging.BitmapImage' и 'string'"
Я понимаю, что это, вероятно, не было бы проблемой, если бы существовала правильная структура MVVM, но в настоящий момент невозможно все это изменить.