Загрузить изображение с файлового сервера с помощью Caliburn Micro и Silverlight

#c# #silverlight #mvvm #caliburn.micro

#c# #silverlight #mvvm #caliburn.micro

Вопрос:

У меня такое чувство, что это простой вопрос, но мне трудно разобраться в нем. Я использую Silverlight, MVVM и Caliburn Micro для разработки своего проекта. В одном разделе у меня есть поиск сотрудника, который должен отображать изображение сотрудника. Пользователь введет идентификационный номер, и система должна найти пользователя и изображение сотрудника на файловом сервере. Имя изображения соответствует идентификационному номеру сотрудника (например, 1234.jpg для сотрудника 1234).

Я не загружаю эти изображения в качестве ресурсов во время разработки, поскольку их сотни, и пользователю, вероятно, понадобится только одно изображение. Мой вопрос в том, как настроить мою модель, чтобы правильно привязываться к элементу управления изображением? Я знаю, как использовать базовый Caliburn Micro (я все еще довольно новичок в этом, поэтому я не охватил все менее частые области), поэтому я в основном извлек бы выгоду только из фрагментов в каждой области (View, Model View и Model), которые будут относиться к управлению изображением. Идеальным сценарием было бы присвоить переменной путь к файлу изображения и отобразить его в моем представлении в виде изображения. Затем, если путь к файлу пуст, удалите изображение.

Вот код, который я пробовал:

Просмотреть модель — это для простоты. Я добавлю кое-что из этого к модели, но суть остается в силе.

 public ImageSource Photo
{
    get
    {
        return new BitmapImage(new Uri(UserPhoto, UriKind.Absolute));
    }
}

public string UserPhoto
{
    get
    {
        return this._userPhoto;
    }
    set
    {
        this._userPhoto = value;
        NotifyOfPropertyChange(() => UserPhoto);
        NotifyOfPropertyChange(() => Photo);
    }
}
  

Вид

 <Image x:Name="Photo" />
  

Свойство UserPhoto является строковым свойством, которое содержит URL-адрес изображения. Я пробовал веб-URL-адреса, а также UNC-пути. Изображения проверены на наличие в этом месте, но они не отображаются, когда я запускаю INCP в свойстве Photo.

Обновить

После дополнительной работы с ним кажется, что это решение будет работать, если вы используете путь к файлу (file://yourserver/yourpath/yourfile.jpg ). Я пытался получить доступ к общедоступной части файлов через http (http://yourserver.domain/yourpath/yourfile.jpg ). Метод http не работает, но метод file работает. Я все еще хотел бы использовать метод http, но у меня, по крайней мере, есть обходной путь. Есть мысли о том, почему file будет работать, а http — нет?

Ответ №1:

Попробуйте вызвать метод изменения свойства для этого свойства. Когда поднимать, зависит от вас, я бы сделал это в пользовательском настройках фотографий.

Комментарии:

1. Я делаю это. Я обновил свой пост, включив также свойство UserPhoto, чтобы вы могли видеть, как я это делаю. Я проверил, и свойство запускается, но на моей странице изображение не отображается.

Ответ №2:

Поскольку растровое изображение будет загружено асинхронно, вы можете попробовать подключить событие DownloadCompleted BitmapImage и снова запустить NPC. Это должно иметь значение.

Комментарии:

1. Спасибо за информацию. Я пробовал это, но ничего не получилось. Однако я обнаружил, что он работает с путем к файлу (вместо http — см. Мое обновление выше). Есть мысли?