Как обновить / обновить sh наблюдаемую коллекцию? - PullRequest
0 голосов
/ 05 мая 2020

Моя наблюдаемая коллекция не обновляется. Когда пользователь просматривает сообщение и возвращается на свою домашнюю страницу, ему нужно go на другую страницу, чтобы обновить sh свою домашнюю страницу, чтобы отразить его последнюю просмотренную статью. Пока в примере пользователь видит статью «Кофе», возвращается к своему HP, а статьи «Кофе» в коллекции нет. Затем он переходит в свой профиль (или на любую другую страницу), а затем возвращается в HP и там обновляется коллекция со статьями кофе. У меня есть свойство notifyproperty

HomePage


      public ArticleBrowser()
                {
                    InitializeComponent();
                    Load();
                }

                private async void Load()
                {
                    BindingContext = new MyArticlesBrowserViewModel();
                    if (BindingContext is MyArticlesBrowserViewModel)
                    {

                        var context = new MyArticlesBrowserViewModel();

                        await context.LoadDataForBestSellers();
                        lastThreeArticlesCarouselView.ItemsSource = null;
                        lastThreeArticlesCarouselView.ItemsSource = context.LastThreeArticles;
                        bestSellersCarouselView.ItemsSource = context.ListOfBestSellers;

                    }
                }

         <local:ExtendedCarouselViewControl x:Name="lastThreeArticlesCarouselView"
                            Grid.Row ="1"
                            HeightRequest="250" 
                            ShowIndicators="True"
                            Margin="0"
                            VerticalOptions="Start"
                            IndicatorsTintColor="{ DynamicResource TranslucidBlack }"
                            CurrentPageIndicatorTintColor="{ DynamicResource BaseTextColor }"
                            ItemsSource="{ Binding LastThreeArticles, Mode=TwoWay }">
                                <cv:CarouselViewControl.ItemTemplate>
                                    <DataTemplate>
                                        <local:AvatArticlesBrowserHeaderItemTemplate />
                                    </DataTemplate>
                                </cv:CarouselViewControl.ItemTemplate>
                            </local:ExtendedCarouselViewControl>

ViewModel

     private static List<Article> _lastOpenedArticles;
            private static List<DownloadedArticle> _allDownloadedArticles;
            private static List<Article> _lastSeenArticles;
            public ObservableCollection<ArticleDetailData> LastThreeArticles { get;  } = new ObservableCollection<ArticleDetailData>();

     void ShowLastListened()
            {
                var downloadedArticles = LangUpDataSaverLoader.DeserializeAllOptimizationData();

                if (_lastOpenedArticles != null && _lastOpenedArticles.Count > 0)
                {
                    foreach (var article in _lastOpenedArticles.Take(3))
                    {
                        var filename = string.Format(SharedConstants.ArticleImageUrl, SharedConstants.ApiBaseUri, article.Id);
                        var newCell = new ArticleDetailData()
                        {
                            Author = article.Author,
                            Description = article.Description,
                            Body = article.Description,
                            Section = article.Category,
                            Id = article.Id,
                            Subtitle = article.Description,
                            Title = article.NameCz,
                            WhenDay = article.DateCreate.Day.ToString() + " / ",
                            WhenMonth = article.DateCreate.Month.ToString() + " / ",
                            WhenYear = article.DateCreate.Year.ToString(),
                            FullDate = article.DateCreate.ToLongDateString(),
                            NumberOfWords = article.NumberOfWords,
                            AmountOfGrammarDescription = article.AmountOfGrammarDescription,
                            ArticleLength = article.ArticleLength,
                            Price = article.Price,
                            IsSubmitted = article.IsSubmitted,
                            BestSellerRating = article.BestSellerRating,
                        };
                        if (downloadedArticles.DownloadedArticles.Any(m => m.Id == article.Id))
                        {
                            newCell.BackgroundImage = article.Id.ArticleImageFile();
                        }
                        newCell.BackgroundImage = filename;
                        LastThreeArticles.Add(newCell);
                    }

                }
            }
     public async Task LoadDataForBestSellers()
            {

                var articlesApiResponse = await AVAT.App.ApiFactory.GetBestSellerArticlesAsync();
                var allArticles = articlesApiResponse.Match(articles => articles.ToList(), _ => new List<Article>());

                FillArticles(allArticles);



                if (LangUpLoggedUser.LoggedIn || LangUpLoggedUser.LoggedOffline)
                {
                    LastThreeArticles.Clear();
                    var lastOpenedArticle = LangUpDataSaverLoader.DeserializeLastLoadedArticle();
                    lastOpenedArticle.Reverse();
                    _lastOpenedArticles = lastOpenedArticle;
                    ShowLastListened();


                }
                else
                {
                    var freeArticlesApiResponse = await AVAT.App.ApiFactory.GetAllFreeArticlesAsync();
                    var allUserArticles = articlesApiResponse.Match(articles => articles.ToList(), _ => new List<Article>());
                    FillAnonymousArticles(allUserArticles);

                }

            }

Я пробовал Refre sh Command, но не получал никаких данных обратно

     public ICommand RefreshCommand { get; }

            public MyArticlesBrowserViewModel()
                : base()
            {
                RefreshCommand = new Command(async () => await ExecuteRefreshCommand());

            }
     async Task ExecuteRefreshCommand()
            {
                if (IsBusy) return;

                IsBusy = true;

                try
                {
                   await LoadDataForBestSellers();
                }
                finally
                {
                    IsBusy = false;
                }
            }

1 Ответ

0 голосов
/ 05 мая 2020

Решено с помощью

protected override void OnAppearing()
     {
        base.OnAppearing();

        var context = new MyArticlesBrowserViewModel();
        lastThreeArticlesCarouselView.ItemsSource = null;
        Task.Run(async () => await context.LoadDataForBestSellers()).Wait();
        bestSellersCarouselView.ItemsSource = context.ListOfBestSellers;
        lastThreeArticlesCarouselView.ItemsSource = context.LastThreeArticles;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...