2013-12-04 3 views
0

У меня есть следующий код в приложении для Windows 8 для настольных компьютеров. Это получает данные из веб-службы и заполняет ее в списке SampleDataGroup.Передача данных между методами в C#

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(); 
    } 
    } 

Это прекрасно работает. Но я хочу использовать данные в вышеуказанной функции в другой функции. Я хочу использовать. Свойства и значения, которые я получаю от веб-службы, я хотел бы использовать в другой функции.

private void Item_Click(object sender, RoutedEventArgs e) 
{ 
    //Use (string)data.Name 
} 

В функции мыши я хочу использовать Name, а также всех других данных, поступающих от первой функции.

Я попытался установить SampleDataGroup data=null; в код, а затем с помощью data=infoSect был замечен выше, а затем вызывается data.Name в функции click, но он возвращает нулевое исключение.

Как передавать данные из одной функции в другую?

+0

u хотите использовать «info» в методе click? – tariq

+0

На самом деле я хотел бы использовать 'item'. Как только я могу передать это функции щелчка, я могу использовать 'item.Name' или что-то еще. – Tester

+0

ответ не помог? – tariq

ответ

1

В настоящее время ваш метод async возвращает void, и вы ничего не делаете с info после его заполнения. Мне кажется, что вы, вероятно, захотите либо вернуть этот список из метода (например, сделать его обратно Task<List<SampleDataGroup>>), либо сделать способ, задающий состояние в переменной экземпляра, чтобы он стал частью состояния объекта. метод.

Без дополнительной информации о классе, который вы разрабатываете, трудно узнать, является ли информация логически частью состояния объекта или следует ли его возвращать из метода - но это ваши основные варианты. (Есть более сложные альтернативы, но это первые два вопроса.)

Вы также должны рассмотреть, что вы хотите, чтобы узнать, если есть ошибка - вы показываете диалоговое окно, но что делать вы хотите, чтобы после этого?

1

Простейшее бы объявить глобальный объект, как показано ниже

object item; 

, а затем изменить его, как этот

if (response.IsSuccessStatusCode) 
{ 
    var content = await response.Content.ReadAsStringAsync(); 

    item = JsonConvert.DeserializeObject<dynamic>(content); 

теперь это должно быть доступно в случае щелчка с последними значениями

Смежные вопросы