使用Caliburn Micro和Silverlight从文件服务器加载图像

使用Caliburn Micro和Silverlight从文件服务器加载图像

问题描述:

我有一种感觉,这是一个简单的问题,但我很难找出答案。我使用Silverlight,MVVM和Caliburn Micro开发我的项目。在一个部分中,我有一个应该显示员工照片的员工查询。用户将输入一个ID号码,系统应该查找用户并在文件服务器上找到员工的图像。该图像以员工ID号码命名(例如,1234.jpg为员工1234)。使用Caliburn Micro和Silverlight从文件服务器加载图像

我不会在设计时将这些图片作为资源加载,因为有数百个,用户可能只需要一个图像。我的问题是如何设置我的模型,以正确绑定到图像控件?我知道使用基本的Caliburn Micro(我还是比较新的,所以我没有覆盖所有不常见的区域),所以我基本上只会从每个区域的片段中获益(视图,模型视图和模型)将涉及图像控件。理想的情况是将图像的文件路径分配给一个变量,并将其作为图像显示在我的视图中。然后,如果文件路径为空,则图像消失。

这里是我试过的代码:

视图模型 - 这是为了简化。我会将其中的一部分推向模型,但重点突出。

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到图像的字符串属性。我尝试了网址以及UNC路径。图像被验证在该位置,但是当我在Photo属性上激发INCP时,图像不显示。

更新

它更玩了之后,似乎如果你使用的文件路径(文件://yourserver/yourpath/yourfile.jpg)这种解决方案会奏效。我一直试图通过http(http://yourserver.domain/yourpath/yourfile.jpg)访问文件的公共端。 http方法不起作用,但文件方法不起作用。我仍然想使用http方法,但我至少有一个解决方法。任何想法,为什么文件会工作,但http不会?

尝试引发该属性的属性更改方法。何时举起它取决于你,我会在UserPhoto setter中做到这一点。

+0

我正在这样做。我更新了我的帖子以包含UserPhoto属性,所以您可以看到我是如何做到的。我查了一下,该财产被解雇,但没有图像显示在我的网页上。 – IAmTimCorey

由于BitmapImage将被异步加载,因此您可以尝试连线BitmapImage的DownloadCompleted事件并再次触发NPC。这应该有所作为。

+0

感谢您的意见。我试过,但没有得到任何地方。但是,我确实发现它可以与文件路径一起工作(而不是http--请参阅上面的更新)。有什么想法吗? – IAmTimCorey