绑定没有用json数据完成

时间:2015-04-15 05:20:26

标签: json windows-phone-8 binding

我有一个列表框,其datacontext设置为一个集合。在后台我将获取数据并将其提供给绑定元素。但它没有反映在我的设计中。代码如下。

<ListBox Name="StatusListBox"
                 DataContext="{Binding StatusCollection}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBlock Text="{Binding}" TextWrapping="Wrap"/>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

在我给出的页面定义中

DataContext="{Binding StatusViewModel, RelativeSource={RelativeSource Self}}"
d:DataContext="{Binding Source={d:DesignData Source=/Data/SampleData.json, Type=data:DataSource}}"

在cs文件中我有一个statusviewmodel,我给出了statusviewmodel,即我提取的内容。

public ObservableDictionary StatusViewModel
    {
        get
        {
            return this.statusViewModel;
        }
    }

    private async void GetStatusOnline()
    {
        HttpWebRequest request = HttpWebRequest.Create(requestURI) as HttpWebRequest;
        WebResponse response = await request.GetResponseAsync();
        ObservableCollection<string> statusCollection = new ObservableCollection<string>();
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            string textcontent = reader.ReadToEnd();
            Debug.WriteLine(textcontent);
            DataSource dataSource = new DataSource();
            this.StatusViewModel["StatusCollection"] = dataSource.GetStatusCollection(textcontent);
        }
    }
private ObservableCollection<Status> _statusCollection = new ObservableCollection<Status>();
    public ObservableCollection<Status> StatusCollection
    {
        get
        {
            return this._statusCollection;
        }
    }
public IEnumerable<Status> GetStatusCollection(string textcontent)
    {
        JsonObject jsonObject = JsonObject.Parse(textcontent);
        JsonArray jsonArray = jsonObject["items"].GetArray();
        foreach (JsonValue value in jsonArray)
        {
            StatusCollection.Add(new Status(value.GetString()));
        }

        return StatusCollection;
    }

示例json数据是

{
"items": [
    "Hi\n",
    "This is my new status. How is this?\n",
    "This is thrid line."
]
}

2 个答案:

答案 0 :(得分:1)

您未设置ItemSource的{​​{1}}属性。变化

ListBox

DataContext="{Binding StatusCollection}"

答案 1 :(得分:-1)

好的,我会对此采取行动。 查看Listbox.ItemTemplate和DataContext的XAML代码, 您已将数据上下文设置为Binding StatusCollection,并且在页面定义中,您将DataContext设置为Binding StatusViewModel。除了d:DataContext是{Binding Source = {d:DesignData Source = / Data / SampleData.json,Type = data:DataSource}

问题出在Listbox的TextTemplate for TextBlock中。由于您将文本设置为{Binding}是简写,因此假设DataContext用于StatusCollection。实际上,您需要的datacontext是用于JSON文件的DesignData源。

所以我建议更改你的StatusViewModel以反映调用JSON文件,否则你的代码是脱节的,而你的JSON文件实际上从未被读过。