From c1c00d0659327cc7e21caa982236ea3a883fad4b Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Wed, 30 May 2018 23:50:39 +0200 Subject: [PATCH] =?UTF-8?q?R=C3=A9paration=20provisoir=20UWP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AideDeJeu/ViewModels/ItemsViewModel.cs | 25 +++++++++++-------- .../AideDeJeu/ViewModels/MainViewModel.cs | 14 ++++++++++- AideDeJeu/AideDeJeu/Views/MainPage.xaml.cs | 4 +-- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs index c4e3b9da..c38c8f08 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs @@ -19,7 +19,7 @@ namespace AideDeJeu.ViewModels public ItemsViewModel(ItemSourceType itemSourceType) { this.ItemSourceType = itemSourceType; - LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommandAsync()); + LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommandAsync().ConfigureAwait(false)); } public ICommand LoadItemsCommand { get; protected set; } //public abstract void ExecuteLoadItemsCommand(); @@ -75,19 +75,24 @@ namespace AideDeJeu.ViewModels Main.IsLoading = true; try { + // Yan : c'est pas plutôt cette partie qui devrait être dans une autre Task ? var filterViewModel = Main.GetFilterViewModel(ItemSourceType); var items = await filterViewModel.FilterItems(AllItems, token); - await Task.Run(() => - { - Main.Items.Clear(); - foreach (var item in items) - { - token.ThrowIfCancellationRequested(); - Main.Items.Add(item); - } - }); + + await Task.Run(async () => { + // Yan : plus besoin de boucle si on change toute la liste d'un coup ;) + // Yan : indispensable de repasser sur l'ui thread pour la version uwp + Device.BeginInvokeOnMainThread(() => Main.Items = items); + //Main.Items.Clear(); + //foreach (var item in items) + //{ + // token.ThrowIfCancellationRequested(); + // Main.Items.Add(item); + //} + }, cancellationToken: token); // Yan : c'est ici qu'il faudrait coller le token non ? //On arrete le loading ici car on annule toujours avant de lancer une nouvelle opération + // Yan : ?? du coup le IsLoading repasse pas à false en cas de cancel ou d'autre exception ? Main.IsLoading = false; } catch (OperationCanceledException ex) diff --git a/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs index c3463121..0cc77ce7 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs @@ -89,7 +89,19 @@ namespace AideDeJeu.ViewModels return AllFiltersViewModel[itemSourceType].Value; } - public ObservableCollection Items { get; private set; } = new ObservableCollection(); + // Yan : pas besoin d'ObservableCollection, on ne modifie jamais la liste item par item + public IEnumerable _Items = new List(); + public IEnumerable Items + { + get + { + return _Items; + } + set + { + SetProperty(ref _Items, value); + } + } private Item _SelectedItem; public Item SelectedItem diff --git a/AideDeJeu/AideDeJeu/Views/MainPage.xaml.cs b/AideDeJeu/AideDeJeu/Views/MainPage.xaml.cs index 0bef7734..f8870ca8 100644 --- a/AideDeJeu/AideDeJeu/Views/MainPage.xaml.cs +++ b/AideDeJeu/AideDeJeu/Views/MainPage.xaml.cs @@ -2,7 +2,7 @@ using AideDeJeuLib.Monsters; using AideDeJeuLib.Spells; using System; - +using System.Linq; using Xamarin.Forms; using Xamarin.Forms.Xaml; @@ -35,7 +35,7 @@ namespace AideDeJeu.Views { base.OnAppearing(); - if (Main.Items.Count == 0) + if (Main.Items.Count() == 0) Main.LoadItemsCommand.Execute(null); }