【发布时间】:2015-12-11 11:08:39
【问题描述】:
我想使用一个 rest web 服务,它在我的 Grid 中的 stackPanels 中显示每种美食的名称,如下所示:
但是使用我的代码,我只得到最后一个元素,如何在 stackPanel 中发送厨房的每个名称,这是我的代码:
<Grid x:Name="Grid1" >
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Path=nom}" x:Name="nomCuisine"/>
</StackPanel>
</StackPanel>
</Grid>
这是我的功能:
private async void GetListeCuisines()
{
UriString2 = "URL/cuisines.php";
var http = new HttpClient();
http.MaxResponseContentBufferSize = Int32.MaxValue;
var response = await http.GetStringAsync(UriString2);
var rootObject = JsonConvert.DeserializeObject<Barberry.Models.RootObject>(response);
for(int i=0; i < 2;i++)
{
nomCuisine.Text = rootObject.cuisines[i].nom;
}
}
这是我的 json 数据:
success: 1,
message: "cuisine found!",
cuisines: [
{
id: "1",
nom: "Cuisine 1"
},
{
id: "2",
nom: "Cuisine 2"
}
]
感谢帮助
更新:
我将我的代码设置为:
<ListView ItemsSource="{Binding items}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="" x:Name="nomCuisine"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这就是函数:
private async void GetListeCuisines()
{
UriString2 = "myURL/cuisines.php";
var http = new HttpClient();
http.MaxResponseContentBufferSize = Int32.MaxValue;
var response = await http.GetStringAsync(UriString2);
var rootObject = JsonConvert.DeserializeObject<Barberry.Models.RootObject>(response);
for(int i=0; i < 2;i++)
{
string items= rootObject.cuisines[i].nom;
}}
这一次我什么也没得到 :(
【问题讨论】:
-
当然,你得到了最后一个元素,因为在你的循环中,每个项目都会覆盖前一个。我认为与其在 stackpanel 中使用一个文本块,不如考虑使用 listview 并将 itemtemplate 设置为文本块,然后将 ItemsSource 设置为您的集合。
-
谢谢大佬,那我怎么绑定那个收藏呢?
-
对于非常简单的情况(仅绑定字符串),只需使用
<TextBlock Text="{Binding}"/>将 ItemTemplate 声明为数据模板。然后设置yourListView.ItemsSource = yourStringArray/stringCollection;。有很多博客/文章等如何处理列表视图。您也可以看看this answer - 它用于长列表选择器,但列表视图的基本示例看起来相同。 -
感谢 Romasz,现在可以使用了 :)
标签: c# win-universal-app windows-10-universal