0

我是 Windows phone 8 新手,目前正在努力使用数组进行 xaml 数据绑定。

XAML:

<phone:LongListSelector x:Name="LocationsData" Margin="0,0,-12,0" ItemsSource="{Binding}">
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
             <StackPanel Margin="0,0,0,17">
                 <TextBlock Text="{Binding name}" TextWrapping="NoWrap" Margin="12,0,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                 <TextBlock Text="{Binding vicinity}" TextWrapping="NoWrap" Margin="12,-6,0,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
             </StackPanel>
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>

。CS

LocationsData.DataContext = _array_of_locations;

_array_of_locations4个项目,

在此处输入图像描述

它们中的每一个都是有效的 JSON,

{
    "geometry": {
        "location": {
            "lat": 12.923101,
            "lng": 77.586057
        }
    },
    "icon": "http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
    "id": "9a769bc2faaa79fe0ffbd85c2c28446940153331",
    "name": "Domino's Pizza",
    "opening_hours": {
        "open_now": false
    },
    "price_level": 1,
    "rating": 2.9,
    "reference": "CnRsAAAAsI0LvfwZ_RC8PEDsJS3TfKkRkTn7d_2_-vw8tu_SYBYCJk2CmKt6RyRJtO5mG0Weq-R0jSsmyQOWHjU45itlrH1cN89EqgIA9Vtmvcih1xi6ZwpNewqZ8mNCQWWLDJvcT3AQLHGnFcn4E9a30Gvs9xIQeKGVsrSOKLDx4vYCjixIKhoUOGeosCJIVFDmE3-3qIPcIM7PSCs",
    "types": [
        "restaurant",
        "food",
        "establishment"
    ],
    "vicinity": "11th Main Road, Jayanagar, Bangalore"
}

它不起作用,因为我不是来自 ac# 背景,所以我迷失了所有文档。那么我如何让这个工作呢?

4

1 回答 1

2

问题不在于这里的数组,而在于数据绑定的来源(即nameand vicinityin {Binding name}and {Binding vicinity})必须是property。数组中的对象没有名称为nameand的属性vicinity,因此不会显示任何内容。实际上,您甚至可能会在 Visual Studio 的“输出”窗口中看到绑定错误,提到它找不到namevicinity属性。

我怀疑您的 中有四个项目LongListSelector,但是因为其中没有任何文本,所以它们的大小为零,您看不到它们。尝试添加TextBlock带有一些静态文本(例如<TextBlock Text="X"/>)的aStackPanel以查看是否出现四个Xs。

如果您只需要以只读方式显示 JSON,那么应该可以将 JSON 反序列化为匿名类型。然后将为每个 JSON 对象创建一个匿名类型,并为 JSON 对象中的每个属性创建一个 (.NET) 属性。例如看这个问题。但是,如果运气好的话,我还没有测试过它。

于 2013-09-23T20:39:18.217 回答