我有一种感觉,这是一个简单的问题,但我很难弄清楚它。我使用Silverlight, MVVM和Caliburn Micro来开发我的项目。在一个部分中,我有一个员工查找,它应该显示该员工的照片。用户将输入一个ID号,系统将查找用户并在文件服务器上找到员工的图像。该图像以员工ID号命名(例如,1234.jpg表示员工1234)。
我没有加载这些图片作为资源在设计时,因为有数百和用户可能只需要一个图像。我的问题是如何设置我的模型,以便正确绑定到图像控件?我知道使用基本的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);
}
}
<<p> 视图/strong> <Image x:Name="Photo" />
UserPhoto属性是一个字符串属性,它保存了图像的URL。我尝试了web url以及UNC路径。图像被验证在那个位置,但是当我在Photo属性上触发INCP时,它们没有显示。
经过更多的玩弄它,似乎这个解决方案将工作,如果你使用文件路径(file://yourserver/yourpath/yourfile.jpg)。我一直试图通过http (http://yourserver.domain/yourpath/yourfile.jpg)访问文件的公共端。http方法不起作用,但file方法起作用。我仍然想使用http方法,但我至少有一个解决办法。有什么想法,为什么文件会工作,但http不会?
尝试为该属性引发property changed方法。当提升由你决定时,我会在UserPhoto setter中进行
由于BitmapImage将被异步加载,你可以尝试连接BitmapImage的DownloadCompleted事件并再次触发NPC。