2009-02-24 31 views
5

Tôi mới vào WPF vì vậy hy vọng tôi đã nói đúng câu hỏi. Những gì tôi muốn làm là ràng buộc <Image> của tôi với một hình ảnh trực tuyến. Tuy nhiên, hình ảnh tôi muốn liên kết với các thay đổi tùy thuộc vào trạng thái của ứng dụng. Ví dụ, nếu tôi muốn liên kết với một nhân viên được lựa chọn từ một danh sách, tôi muốn lấy một URL cơ sở từ App.config của tôi và thêm tên hình ảnh bằng cách sử dụng ID của người lao động, như vậy:Làm thế nào để liên kết với một hình ảnh bằng cách sử dụng một URL động trong WPF?

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

Vấn đề là, tôi không chắc chắn làm thế nào để làm điều này tuyên bố trong WPF. Bất kỳ trợ giúp nào cũng được đánh giá rất cao!

Trả lời

3

Bạn có một đối tượng người lao động trong mã của bạn? Nếu vậy bạn có thể trưng ra một thuộc tính URI được xây dựng dựa trên ID nhân viên của đối tượng.

Nếu không, bạn có thể có một trang asp.net trên trang web của bạn phục vụ lên một hình ảnh (tôi không có ý tưởng nếu điều này sẽ làm việc, nó là một ý tưởng mặc dù)

nên có một cái gì đó như thế này trong XAML của bạn

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

Image.aspx sẽ truyền hình ảnh dựa trên biến employeeId nhận?

Như tôi đã nói có thể có một chút sai với điều này nhưng nó có thể làm việc, tôi nghĩ rằng tài sản URI trên một lớp nhân viên sẽ là lựa chọn sạch nhất mặc dù.

+0

Điều này làm việc rất tốt. Cảm ơn đã giúp đỡ! –

0

Tôi nghĩ rằng một cái gì đó như thế này sẽ giúp:

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

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

Sau đó, trong code-behind của bạn:

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

Đường dẫn hệ thống tệp có thể được thay thế cho URL không? Tôi nghĩ đó là câu hỏi ban đầu cần thiết (và tôi tò mò). –

+0

Theo như tôi biết, có. –

+0

Cảm ơn bạn đã phản hồi. Đề xuất tuyệt vời. Tuy nhiên, tôi đã hy vọng có thể có một cách để làm điều này declaratively (mà không cần phải đi vào codebehind). Tôi có hy vọng quá nhiều không? :) –

Các vấn đề liên quan