Как привязать изображение с помощью динамического URL-адреса в WPF?

Я новичок в WPF, поэтому, надеюсь, я правильно сформулировал вопрос. Что я хотел бы сделать, так это привязать свой <Image> к изображению в Интернете. Однако изображение, к которому я хотел бы привязать, изменяется в зависимости от состояния приложения. Например, если бы я хотел привязаться к сотруднику, выбранному из списка, я бы получил базовый URL-адрес из моего App.config и добавил имя изображения, используя идентификатор сотрудника, например так:

var baseUrl = ConfigurationSettings.AppSettings["BaseImageUrl"];
var imageUrl = String.Format("{0}/{1}.jpg", baseUrl, employeeID);

Проблема в том, что я не уверен, как это сделать декларативно в WPF. Любая помощь приветствуется!


person Kevin Babcock    schedule 24.02.2009    source источник


Ответы (2)


У вас есть объект сотрудника в вашем коде? Если это так, вы можете предоставить свойство URI, которое построено на основе идентификатора сотрудника объекта.

В противном случае у вас может быть страница asp.net на вашем веб-сайте, которая обслуживает изображение (я понятия не имею, сработает ли это, хотя это идея)

так что есть что-то подобное в вашем xaml

<Image Source="{Binding Path=EmployeeId, StringFormat='http://my.url.com/Image.aspx?employeeId={0}'}" />

Image.aspx будет передавать изображение на основе переменной get employeeId?

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

person Jake Ginnivan    schedule 27.03.2009

Я думаю, что-то вроде этого поможет:

<Window.Resources>
   <ImageSource x:Key="MyImage" Source="C:\Images\Default.jpg" />
</..>

<Image Source="{DynamicResource MyImage}" />

Затем в вашем коде:

((ImageSource)this.Resources["MyImage"]).Source = "C:\Path\From\Config.jpg";
person Paul Stovell    schedule 24.02.2009
comment
Можно ли заменить этот путь файловой системы на URL-адрес? Я думаю, что это то, что требовалось в исходном вопросе (и мне любопытно). - person Drew Noakes; 24.02.2009
comment
Спасибо за ответ. Отличное предложение. Однако я надеялся, что может быть способ сделать это декларативно (без необходимости углубляться в программный код). Я слишком на многое надеюсь? :) - person Kevin Babcock; 24.02.2009
comment
Кроме того, я бы держался подальше от динамических ресурсов. - person kevindaub; 16.01.2010
comment
@ daub815, почему бы вам держаться подальше от динамических ресурсов? - person John Kraft; 21.09.2011
comment
Он использует больше ресурсов, поэтому вам, вероятно, следует использовать его только тогда, когда он вам абсолютно необходим. - person kevindaub; 21.09.2011