Конвертер для возврата разных типов? - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть 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, но в настоящий момент невозможно все это изменить.

1 Ответ

4 голосов
/ 21 февраля 2012

Измените выражение return на это, чтобы оно работало:

if(employee.Picture != null)
    return GetImageFromByteArray(employee.Picture)
return "/Resource/images/silhouette.jpg";

Или вы можете сначала создать изображение из «изображения по умолчанию», а затем использовать оператор возврата, как и раньше.

...