使用json数据在Windows 8 metro风格应用程序中进行数据绑定(c#)

时间:2012-07-09 15:52:34

标签: c# json data-binding windows-8 deserialization

我正在尝试在Visual Studio Express 2012 RC中制作应用程序。我下载了一些JSON数据并对其进行了反序列化。但是在将数据绑定到列表框之后,它不是显示实际内容,而是在文本块中显示project-name.page-name+Datum

以下是XAML代码的一部分:

<ListBox x:Name="listbox1" HorizontalAlignment="Left" Height="687" Margin="10,71,0,0" VerticalAlignment="Top" Width="1346" ItemsSource="{Binding data}">
    <TextBlock x:Name="textblock1" TextWrapping="Wrap" Height="50" Width="443" Text="{Binding name}" />
</ListBox>

以下是xaml.cs代码的一部分

public class RootObject
{
    public List<Datum> data { get; set; }

}
public class Datum
{
    public string name { get; set; }
}

这是我用来反序列化JSON数据的代码

stream loading = await load.GetStreamAsync(....);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(RootObject));
RootObject loaded = (RootObject) ser.ReadObject(loading);
listbox1.DataContext = loaded;

谁能告诉我我的代码有什么问题?我在Windows手机应用程序中使用相同的东西,并且它工作正常,除了我在其中使用了webclient。

请帮忙。

1 个答案:

答案 0 :(得分:0)

您已在ListBox的Items集合中添加了UIElement。让项目显示你想要的东西的正确方法是应用ItemTemplate。您可以内联或引用资源。

<ListBox ItemsSource="{Binding data}">
    <ListBox.ItemTemplate>
        <DataTemplate>
          <TextBlock Text="{Binding name}" />
        </DataTemplate>
    </ListBox.ItemTemplate
</ListBox>

它应该适用于该设置,但我没有测试它。如果这样做,请记住将其标记为答案,以便其他人可以从您的询问中学习。

附注

我还建议您删除任何非必要属性的示例代码,以获取它的价值。并且避免使用硬编码的宽度/边距值 - 允许应用程序元素按比例调整大小。