невозможно отобразить данные из веб-службы json в списке приложений Windows Phone 7.1 - PullRequest
0 голосов
/ 27 декабря 2011

Я пытаюсь использовать веб-сервис json из приложения Windows Phone и отображать полученные данные в списке. Я могу получить данные из веб-службы (в e.result), однако я не могу получить данные в списке. Вот мой код xaml.

 <Grid x:Name="ContentPanel" Grid.Row="2" Margin="12,0,12,0">
        <Grid.Background>
            <SolidColorBrush Color="Black" >
            </SolidColorBrush>
            <!--<ImageBrush ImageSource="/images/BG@.png" 5F91F5/>-->
        </Grid.Background>
        <ListBox x:Name="carslist" Padding="0,0,0,0" HorizontalAlignment="Center"  VerticalAlignment="Top" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border Margin="3" Height="50">
                        <StackPanel Background="Transparent" Orientation="Vertical" Width="420" Height="60">
                            <StackPanel Background="Transparent" Orientation="Horizontal" Width="420" Height="60">
                                <TextBlock Foreground="White" HorizontalAlignment="Left" TextWrapping="NoWrap"  VerticalAlignment="Center" FontSize="26" Text="{Binding cartype}"/>
                                <TextBlock Foreground="White" HorizontalAlignment="Left" TextWrapping="NoWrap"  VerticalAlignment="Center" FontSize="26" Text="{Binding carcode}"/>
                            </StackPanel>
                        </StackPanel>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>

Ниже приведен мой код xaml.cs.

 public MainPage()
    {
        InitializeComponent();
        string key = "123";
        WebClient getcars = new WebClient();
        getcars.DownloadStringCompleted += new DownloadStringCompletedEventHandler(getcars_DownloadStringCompleted);
        getcars.DownloadStringAsync(new Uri("http://myurl?key=" + "{" + key + "}"));

    }


    void getcars_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        Stream stream = new MemoryStream(Encoding.Unicode.GetBytes(e.Result));
        DataContractJsonSerializer obj = new DataContractJsonSerializer(typeof(List<cars>));
        List<cars> result = obj.ReadObject(stream) as List<cars>;
        carslist.ItemsSource = result;

    }

}

public class cars
{
    public string carcode { get; set; }
    public string cartitle { get; set; }
    public string cartype { get; set; }
    public string carid { get; set; }
}

Может ли кто-нибудь помочь мне решить мою проблему? ... Заранее спасибо.

1 Ответ

0 голосов
/ 28 декабря 2011

Понятно почему не работает.List<cars> result создается как локальная переменная внутри обработчика getcars_DownloadStringCompleted с локальной областью действия для этого обработчика, и, следовательно, ее сборщик мусора сразу же собирается по завершении этого обработчика.Вот почему вы не видите никаких данных.

Чтобы это исправить, создайте на своей странице открытое свойство, например

public ObservableCollection<cars> Results {get;set;}

, и в обработчике getcars_DownloadStringCompleted добавьте свои результаты в эту коллекцию Results.Затем сделайте это в коде:

carslist.ItemsSource = this.Results;

, и оно должно работать.

Также убедитесь, что элементы, десериализованные из службы JSon, действительны, прежде чем добавлять их в коллекцию результатов.Я бы поставил точку останова в отладчике в строке, где вы назначаете элементы в коллекцию результатов, и убедитесь, что там действительно что-то добавлено, просто чтобы быть уверенным.

Реализация INotifyPropertyChanged в классе cars также должна быть выполнена, если вы спроситея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...