2012-05-15 2 views
3

Я, наконец, добрался до стартового телефона для Windows. Я еще не очень хорош в этом, но, надеюсь, вы, ребята, понимаете, что я хочу здесь сделать.WP7 - Обновление списка

Из того, что я узнал от других программистов, ObservableCollection можно обновить в режиме реального времени, пока он привязан к объекту, например, к списку. Все изменения в ObservableCollection приведут к тому, что пользовательский интерфейс объекта, к которому он привязан, обновит его элементы.

Так что я пытаюсь сделать, это загрузить файл с моего сервера, проанализировать его с помощью json, а затем обновить ObservableCollection с новыми данными. Тем не менее, веб-клиент, похоже, не загружает новые данные до тех пор, пока приложение не будет открыто!


Вот GIF, показывающий, как приложение работает в данный момент: enter image description here

И вот мой код (срубить немного):

Dim aList As New ObservableCollection(Of classes.consoles) 

Private Sub PhoneApplicationPage_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
     checkforconsoles() 
End Sub 

Public Sub checkforconsoles() 
     Dim wc As New WebClient() 
     AddHandler wc.DownloadStringCompleted, AddressOf downloaded 
     wc.DownloadStringAsync(New Uri("http://localhost/api/?function=GetConsolesForUser&userid=" & id)) 
    End Sub 

    Private Sub downloaded(sender As Object, e As DownloadStringCompletedEventArgs) 

     aList.Clear() 
     'MessageBox.Show(e.Result) 

     Dim o As JObject = JObject.Parse(e.Result) 

     Dim jarray As JArray = DirectCast(o("results"), JArray) 

     Try 
      Dim i As Integer = jarray.Count() 

      For i = 0 To jarray.Count() - 1 Step 1 

       Dim id As String = jarray(i)("id").ToString 
       Dim name As String = jarray(i)("name").ToString 
       Dim image As String = jarray(i)("image").ToString 

       MessageBox.Show(name) 

       Dim c As classes.consoles = New classes.consoles() 
       c.categoryimage = New Uri(image) 
       c.categoryname = name 
       c.categoryid = id 

       aList.Add(c) 
      Next 

      listBoxview.ItemsSource = aList 
      StackPanel1.Visibility = Windows.Visibility.Collapsed 
      StackPanel2.Visibility = Windows.Visibility.Visible 

     Catch ex As Exception 
      StackPanel2.Visibility = Windows.Visibility.Collapsed 
      StackPanel1.Visibility = Windows.Visibility.Visible 
     End Try 

    End Sub 

Private Sub ApplicationBarIconButton_Click_1(sender As System.Object, e As System.EventArgs) 
    checkforconsoles() 
End Sub 

Кто-нибудь есть какие-либо понятия, что случилось ? :(

Заранее спасибо.

+3

это может быть кэширование проблемы Попробуйте это:.. 'wc.DownloadStringAsync (New Uri («http: // localhost/api /? function = GetConsolesForUser & userid =" & id & "& random =" + Guid.NewGuid(). ToString())) ' – keyboardP

+1

определенно кажется проблемой кэширования –

+0

Что такое код для добавления нового элемента? Ваше приложение ApplicationBarIconButton_Click (я предполагаю) –

ответ

2

Это вопрос cachine с WebClient. Вы можете добавить случайную строку запроса, чтобы гарантировать, что URL всегда уникален, так что WebClient не кэширует результаты. Один из способов чтобы сделать это, чтобы добавить случайное значение GUID, так как это очень маловероятно, чтобы генерировать два одинаковых GUIDs в короткий промежуток времени

wc.DownloadStringAsync(New Uri("http://localhost/api/?function=GetConsolesForUser& 
         userid=" & id & "&random=" + Guid.NewGuid().ToString())) 
Смежные вопросы