我想将Image的Source(在WinRT XAML中)绑定到名为ServiceEnvoy的视图模型的ImageSource属性,该属性指向项目&Assets目录中的图像。这是视图模型:
public class ServiceEnvoy
{
public ServiceEnvoy(string name, ImageSource source)
{
this.Name = name;
this.ImageSource = source;
}
public string Name { get; private set; }
public ImageSource ImageSource { get; private set; }
}
这是我想要公开视图模型的ListView的XAML:
<ListView ItemsSource="{Binding Services}"
...>
<ListView.ItemTemplate>
<DataTemplate>
<Button>
<Button.Content>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/> <!--Works fine-->
<Image Source="{Binding ImageSource}"/> <!--Does not-->
</StackPanel>
</Button.Content>
</Button>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
然而,还有另一个复杂因素:视图模型从JSON反序列化以加载到主页面上。
这是我到目前为止的JSON:
{
"Services": [
{
"Name": "OneDrive",
"Image": "onedrive.png"
}
]
}
ServiceEnvoyExtractor类(在Pastebin上找到here)通过将"ms-appx:///Assets/"
附加到"Image"
并从中创建Uri / BitmapImage来提取视图模型。我不确定这是不是问题,但我尝试将JSON更改为"Image": "/Assets/onedrive.png"
或"ms-appx:///Assets/onedrive.png"
并重建,但设计师仍然没有显示图像。但是,当我在手机上运行时,它可以正常工作。
我的d:DataContext
是:d:DataContext="{Binding Source={d:DesignData Source=/Data/ServiceRecords.json, Type=data:DesignableServiceEnvoyCollection}}"
答案 0 :(得分:0)
嗯,这很简单。
用ImageSource
的类型让我自己感到沮丧并重新命名并用它测试其他控件并摆弄JSON后,我意识到虽然它的关键是"Image"
,但我与"ImageSource"
绑定。
那,并将其目录更改为"Assets/onedrive.png"
解决了问题。
编辑: XAML似乎也对如何无法序列化ImageSource
属性提出错误;将属性更改为类型string
可以解决问题。