繁体   English   中英

Xamarin.forms 下载数据后刷新轮播视图

[英]Xamarin forms refresh carouselview after dowloading data

我在学习xamarin,

每次下载数据时,我都试图刷新我的 carouselView。

数据已正确下载,但问题是当我下载新数据时,我想在我的 carrouselView 上交换以查看上一次数据下载后的新数据。

轮播“移动”并将我定位在我之前的 position(索引),即使我想在每次数据下载时成为 position(索引)0 上的 position

如何正确刷新轮播视图?

这是我的代码 CS:

try
        {

        // trying to refresh by renitializing my carouselView
        Device.BeginInvokeOnMainThread(() =>
        {
            NewsList.Position = 0;
            NewsList.ItemsSource = null;
          
           
        });

            
        // Perform the Web request and get the response
        HttpWebResponse response = (HttpWebResponse)request.GetResponseAsync().Result;

        // Data Downloaded
        string json = new StreamReader(response.GetResponseStream()).ReadToEnd();
        JObject joResponse = JObject.Parse(json);
        JArray MyJsonResult = (JArray)joResponse["value"];



          List<NewsModel> newsObj = new List<NewsModel>();
             
                foreach (var j in MyJsonResult)
            {

                    joResponse2 = JObject.Parse(j.ToString());

                    if (joResponse2["image"]!= null)
                    {
                        

                        var news = new NewsModel();
                        news.NewsName = GetFewWordsSentence(joResponse2["name"].ToString()) ;
                        news.NewsDate = joResponse2["datePublished"].ToString();
                        news.NewsImageUrl = joResponse2["image"]["contentUrl"].ToString(); 
                        newsObj.Add(news);

                     // feed my carouselView in the loop for performance
                       // I have already try, to put this line out of the loop but it is not refresh correctly also
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        NewsList.ItemsSource = newsObj;

                   });


                }
               
                }

                    
    }


    catch (Exception e)
    {
        Console.Error.WriteLine(@"ERROR {0}", e.Message);

    }

提前致谢

轮播“移动”并将我定位在我之前的 position(索引),即使我想在每次数据下载时成为 position(索引)0 上的 position

根据你的描述,你下载数据显示CarouselView,然后你在position中的任意一个item换成CarouselView。你想显示新数据和go到position 0再下载数据,我说的对吗?

如果是的话,我建议你可以先用observablecollection来代替List,它实现了INotifyPropertychanged接口来通知数据更新的时候。

  public ObservableCollection<NewsModel> newsObj { get; set; }

然后再次下载数据时清除数据,

 newsObj.Clear();

使用 ScrollTo 将指定索引处的项目滚动到视图中。

 Device.BeginInvokeOnMainThread(()=>
        {
            newsList.ScrollTo(0);
        }
        ) ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM