2009-02-24 5 views
5

Ich bin neu bei WPF, also habe ich die Frage hoffentlich richtig formuliert. Was ich tun möchte, ist meine <Image> an ein Bild online zu binden. Allerdings hängt das Bild, an das ich mich binden möchte, vom Status der Anwendung ab. Zum Beispiel, wenn ich an einen Mitarbeiter aus einer Liste ausgewählt binden wollte, würde ich eine Basis-URL von meinem App.config abrufen und den Namen des Bildes mit der ID des Mitarbeiters anhängen, etwa so:Wie binden Sie ein Bild mithilfe einer dynamischen URL in WPF?

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

Das Problem ist, ich bin nicht sicher, wie dies in WPF deklarativ zu tun ist. Jede Hilfe wird sehr geschätzt!

Antwort

3

Haben Sie ein Mitarbeiter-Objekt in Ihrem Code? In diesem Fall könnten Sie eine URI-Eigenschaft bereitstellen, die auf der Mitarbeiter-ID des Objekts basiert.

Andernfalls könnten Sie eine asp.net Seite auf Ihrer Website, die ein Bild dient (ich habe keine Ahnung, ob dies funktionieren wird, ist es eine Idee, obwohl)

so etwas wie diese haben in Ihrem XAML

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

Image.aspx würde das Bild basierend auf der Variable employeeId streamen?

Wie gesagt, es ist wahrscheinlich ein bisschen falsch, aber es könnte funktionieren, ich denke, die URI-Eigenschaft in einer Mitarbeiterklasse wäre die sauberste Option.

+0

Das hat einfach super geklappt. Danke für die Hilfe! –

0

Ich denke, so etwas wie dies hilft:

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

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

Dann im Code-Behind:

((ImageSource)this.Resources["MyImage"]).Source = "C:\Path\From\Config.jpg"; 
+0

Kann dieser Dateisystempfad durch eine URL ersetzt werden? Ich denke, das ist die ursprüngliche Frage (und ich bin neugierig). –

+0

Soweit ich weiß, ja. –

+0

Danke für die Antwort. Großer Vorschlag. Ich hatte jedoch gehofft, dass es einen Weg geben könnte, dies deklarativ zu tun (ohne in Codebehind gehen zu müssen). Hoffe ich zu viel? :) –