我的Windows 8桌面应用程序中有以下代码。这将从Web服务获取数据并将其填充到列表SampleDataGroup
中。
protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://localhost:12345/api/items");
var info = new List<SampleDataGroup>();
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
var item = JsonConvert.DeserializeObject<dynamic>(content);
foreach (var data in item)
{
var infoSect = new SampleDataGroup
(
(string)data.Id.ToString(),
(string)data.Name,
(string)"",
(string)data.PhotoUrl,
(string)data.Description
);
info.Add(infoSect);
//data=infoSect;
}
}
else
{
MessageDialog dlg = new MessageDialog("Error");
await dlg.ShowAsync();
}
}
这很好用。但是我想在另一个函数中使用上面函数中的数据。我想用。我从Web服务获得的属性和值,我想在另一个函数中使用。
private void Item_Click(object sender, RoutedEventArgs e)
{
//Use (string)data.Name
}
在点击功能中,我想使用Name
,以及第一个函数中的所有其他数据值。
我尝试在代码中设置SampleDataGroup data=null;
,然后使用上面注释掉的data=infoSect
,然后在click函数中调用data.Name,但它返回一个空异常。
如何将数据从一个函数传递到另一个函数?
答案 0 :(得分:1)
目前你的异步方法返回void,填充后你没有对info
做任何事情。在我看来,您可能希望从该方法返回该列表(例如,使其返回Task<List<SampleDataGroup>>
)或使该方法在实例变量中设置状态,以便它成为调用该方法的对象状态的一部分。
如果没有关于您正在设计的类的更多信息,很难知道信息是逻辑上是对象状态的一部分还是应该从方法返回 - 但这些是你的基本选择。 (有更复杂的选择,但这是前两个要考虑的。)
如果出现错误,你还应该考虑你想要在状态方面发生什么 - 你正在显示一个对话框,但是你想在那之后发生什么?
答案 1 :(得分:1)
最简单的方法是将全局对象声明为
object item;
然后像这样改变它
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
item = JsonConvert.DeserializeObject<dynamic>(content);
现在这应该在具有最新值
的点击事件中可用