Моя наблюдаемая коллекция не обновляется. Когда пользователь просматривает сообщение и возвращается на свою домашнюю страницу, ему нужно 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;
}
}