使用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中做到这一点。
由于BitmapImage将被异步加载,因此您可以尝试连线BitmapImage的DownloadCompleted事件并再次触发NPC。这应该有所作为。
感谢您的意见。我试过,但没有得到任何地方。但是,我确实发现它可以与文件路径一起工作(而不是http--请参阅上面的更新)。有什么想法吗? – IAmTimCorey
我正在这样做。我更新了我的帖子以包含UserPhoto属性,所以您可以看到我是如何做到的。我查了一下,该财产被解雇,但没有图像显示在我的网页上。 – IAmTimCorey