0

Flickrs Rest サービスからデータを取り込み、ListView にデータを入力するコードがあります。このコードは問題なく動作し、アプリを実行すると、写真を検索してリストを表示できます。ただし、単一の写真データを取得したいのですが、ListView からこのデータにアクセスしようとすると、完全に空になります (デバッグしたところ、null エントリだけが含まれています)。私は C# の経験があまりないので、null の結果が得られる理由について教えてもらえますか?

        private async void ParseFlickrResponse(HttpResponseMessage response)
    {

        XDocument xml = XDocument.Parse(await response.Content.ReadAsStringAsync());          
        var photos = from results in xml.Descendants("photo")
                     select new FlickrImage
                     {
                         ImageId = results.Attribute("id").Value.ToString(),
                         FarmId = results.Attribute("farm").Value.ToString(),
                         ServerId = results.Attribute("server").Value.ToString(),
                         Secret = results.Attribute("secret").Value.ToString(),
                         Title = results.Attribute("title").Value.ToString()
                     };

        FlickrListView.ItemsSource = photos;




    }

編集済み

現在のコード:

enter code here:

プライベート async void ParseFlickrResponse(HttpResponseMessage 応答) {

        XDocument xml = XDocument.Parse(await response.Content.ReadAsStringAsync());          
        var photos = from results in xml.Descendants("photo").ToList()
                     select new FlickrImage
                     {
                         ImageId = results.Attribute("id").Value.ToString(),
                         FarmId = results.Attribute("farm").Value.ToString(),
                         ServerId = results.Attribute("server").Value.ToString(),
                         Secret = results.Attribute("secret").Value.ToString(),
                         Title = results.Attribute("title").Value.ToString()
                     };


        FlickrListView.ItemsSource = new ObservableCollection<FlickrImage>(photos);


    }

    private void GetPhotoSource(object sender, ItemClickEventArgs e)
    {

        int inx = FlickrListView.SelectedIndex;
       // FlickrImage t = lst.First();
        FlickrImage t = lst.ElementAt(inx);
        MyImage.Source = new BitmapImage(new Uri(t.ImageUrl.ToString(), UriKind.Absolute));  


    }
4

1 に答える 1

0

LINQ の最後に .ToList() を追加してみてください。

*EDIT(コメントの要約)

ListViewBase の選択プロパティが変更される前に発生すると思われる ItemClick イベントを処理しています。これらはこの時点では更新されていないため、e.ClickedItem をチェックして FlickrImage にキャストし、クリックしたアイテムを取得できます。

選択プロパティを操作したい場合は、SelectionChanged イベントを処理する必要があります。

于 2012-10-23T15:43:41.353 に答える