WindowsPhoneDataBoundApplication с веб-сервисом

Я хочу объединить мой код, содержащий веб-службу, и код приложения WindowsPhoneDataBound. Возможно ли это? и как? Мой код:

   private void button1_Click(object sender, RoutedEventArgs e)
    {
        Uri url = new Uri("http://www.google.com/ig/api?weather=" + textBoxVille.Text, UriKind.Absolute);
        WebClient client = new WebClient();
        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
        client.DownloadStringAsync(url);
    }
    void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            StringReader stream = new StringReader(e.Result);
            XmlReader reader = XmlReader.Create(stream);

            reader.MoveToContent();

            while (reader.Read())
            {
                switch (reader.Name)
                {
                    case ("day_of_week"):
                        {
                            listBox1.Items.Add(new ListBoxItem()
                            {
                                Content = reader.GetAttribute("data")
                            });
                        } break;
                    case ("low"):
                        {
                            listBox1.Items.Add(new ListBoxItem()
                            {
                                Content = reader.GetAttribute("data")
                            });
                        } break;
                    case ("high"):
                        {
                            listBox1.Items.Add(new ListBoxItem()
                            {
                                Content = reader.GetAttribute("data")
                            });
                        } break;
                    case ("icon"):
                        {
                            listBox1.Items.Add(new ListBoxItem()
                            {
                                Content = reader.GetAttribute("data")
                            });
                        } break;

                    case ("condition"):
                        {
                            listBox1.Items.Add(new ListBoxItem()
                            {
                                Content = reader.GetAttribute("data")
                            });
                        } break;
                    case ("weather"):
                        break;
                }
            }
            reader.Close();
        }
    }

1 ответ

Решение

Конечно, это возможно с помощью привязки данных и наблюдаемых коллекций. Вместо добавления новых элементов списка каждый раз, когда вы получаете новый элемент, вы можете использовать ObservableCollection. Установите источник данных списка в наблюдаемую коллекцию.
Преимущество использования ObservableCollection состоит в том, что всякий раз, когда вы добавляете или удаляете элемент из вашей коллекции, ваш список автоматически отражает это. Поэтому нет необходимости вручную добавлять или удалять listboxItems. Если ваш listboxItem имеет пользовательский макет, вы можете создать dataTemplate и связать данные с элементами, которые должны отображаться в listboxItem.

Другие вопросы по тегам