Windows 8 在Blend 2012的设计模式下查看示例数据的位图图像

Windows 8 在Blend 2012的设计模式下查看示例数据的位图图像,windows-8,bitmapimage,design-time-data,blend-2012,Windows 8,Bitmapimage,Design Time Data,Blend 2012,是否有方法创建BitmapImage作为示例数据,用于Blend 2012 Metro应用商店应用程序(在Windows 8上) 我有一个ViewModel,如下所示: public ItemDesignDataVM() { WebThumbnail = new BitmapImage(new Uri(???)); } public string ItemId { get { return "123456"; } } public BitmapImage WebThumbnail { g

是否有方法创建BitmapImage作为示例数据,用于Blend 2012 Metro应用商店应用程序(在Windows 8上)

我有一个ViewModel,如下所示:

public ItemDesignDataVM()
{
   WebThumbnail = new BitmapImage(new Uri(???));
}

public string ItemId { get { return "123456"; } }
public BitmapImage WebThumbnail { get; private set; }
并希望在Xaml中绑定到它,如下所示:

<Page.Resources>
  <DesignData:ItemDesignDataVM x:Key="ItemDesignDataVM" />
</Page.Resources>

<TextBox Text="{Binding ItemId}" />
<Image Source="{Binding WebThumbnail}" />

问题是,无论我将什么传递给BitmapImage构造函数,都无法创建它。我尝试了各种不同的相对路径和绝对路径

如果我附加到XDesProc.exe进程并调试该代码路径,则BitmapImage.PixelHeight和PixelWidth为0,我认为这意味着它们尚未加载

我的绑定是正确的,因为我在设计器中看到了ItemId


任何帮助都将不胜感激。

我不知道这是实际代码还是伪代码,但我发现您发布的内容存在一些问题

首先,您的Web缩略图属性不支持更改通知。由于属性是在构造函数中设置的,所以应该可以,但是如果以后决定以异步方式进行设置,则在绑定发生后可以填充该属性,并且在没有更改通知的情况下,UI将永远不会更新

接下来,尽管您已经将ViewModel创建为页面资源,但我没有看到您将其设置为页面的DataContext的任何地方。ViewModel不必设置为资源,它可以直接在DataContext或d:DataContext属性上设置。因为您是说您看到了ItemId,所以您可以在其他地方使用xaml或代码将此资源连接到DataContext,或者在文本框中使用默认值

至于为什么PixelWidth和PixelHeight为零,也许您在调用构造函数之后,在BitmapImage实际有机会异步下载图像数据之前,正在检查它?这些值以后可能会被填充,但是如果您没有正确设置页面的DataContext,您将永远看不到图像

如果实际情况并非如此,您可能对URL有问题。首先,在线尝试已知图像的URL。确保URL在浏览器中正常工作,然后在代码中尝试。如果URL用于本地文件,则需要使用一些特殊前缀,如ms appx://如果文件嵌入到项目中,ms-appdata:///local/...如果它在您的应用程序本地文件夹中,ms-appdata:///roaming/...如果它在您的应用程序漫游文件夹等中(请注意3个斜线)


希望这有助于……

感谢您的全面回复。这确实很有帮助。从网页加载图像确实会导致图像以设计模式出现在我的视图中,这很好,只是意味着当我尝试指向本地文件时,Url错误。很抱歉,细节不清楚。我确实在我的XAML中设置了更高级别的DataContext,但我没有发布,我也没有对PropertyChanged代码进行任何修改,因为我没有在构造函数之外设置任何内容。我使用ms appx:///{ImageName}使其工作。Windows.Storage.ApplicationData.Current.LocalFolder.Path返回一些随机生成的路径,因此我不确定ms-appdata:///local (或漫游)在设计时间内工作