在设计器中没有出现绑定Image.Source到属性

时间:2015-03-29 02:29:24

标签: xaml data-binding windows-runtime windows-phone-8.1 winrt-xaml

我想将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}}"

1 个答案:

答案 0 :(得分:0)

嗯,这很简单。

ImageSource的类型让我自己感到沮丧并重新命名并用它测试其他控件并摆弄JSON后,我意识到虽然它的关键是"Image",但我与"ImageSource"绑定。

那,并将其目录更改为"Assets/onedrive.png"解决了问题。

编辑: XAML似乎也对如何无法序列化ImageSource属性提出错误;将属性更改为类型string可以解决问题。