json 数据未完成绑定
binding not being done with json data
我有一个列表框,它的数据上下文设置为一个集合。在后台,我正在获取数据并将其提供给绑定元素。但它并没有体现在我的设计中。代码如下。
<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."
]
}
您没有设置 ItemSource
属性 的 ListBox
。变化
DataContext="{Binding StatusCollection}"
到
ItemSource="{Binding StatusCollection}"
好的,我来试试看。
查看 Listbox.ItemTemplate 和 DataContext 的 XAML 代码,
您已将数据上下文设置为 Binding StatusCollection,并且在您的页面定义中,您将 DataContext 作为 Binding StatusViewModel。 d:DataContext 还有 {Binding Source={d:DesignData Source=/Data/SampleData.json, Type=data:DataSource}
问题出在列表框的 TextBlock 的 ItemTemplate 上。由于您将文本设置为 {Binding},即 shorthand,因此假定 DataContext 用于 StatusCollection。实际上,您想要的数据上下文是 JSON 文件的 DesignData 源。
所以我建议更改您的 StatusViewModel 以反映调用 JSON 文件,否则您的代码会脱节,而您的 JSON 文件从未真正被读取过。
我有一个列表框,它的数据上下文设置为一个集合。在后台,我正在获取数据并将其提供给绑定元素。但它并没有体现在我的设计中。代码如下。
<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."
]
}
您没有设置 ItemSource
属性 的 ListBox
。变化
DataContext="{Binding StatusCollection}"
到
ItemSource="{Binding StatusCollection}"
好的,我来试试看。 查看 Listbox.ItemTemplate 和 DataContext 的 XAML 代码, 您已将数据上下文设置为 Binding StatusCollection,并且在您的页面定义中,您将 DataContext 作为 Binding StatusViewModel。 d:DataContext 还有 {Binding Source={d:DesignData Source=/Data/SampleData.json, Type=data:DataSource}
问题出在列表框的 TextBlock 的 ItemTemplate 上。由于您将文本设置为 {Binding},即 shorthand,因此假定 DataContext 用于 StatusCollection。实际上,您想要的数据上下文是 JSON 文件的 DesignData 源。
所以我建议更改您的 StatusViewModel 以反映调用 JSON 文件,否则您的代码会脱节,而您的 JSON 文件从未真正被读取过。