mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-30 23:16:09 +00:00 
			
		
		
		
	Listes
This commit is contained in:
		
							parent
							
								
									ad9344567c
								
							
						
					
					
						commit
						bf01af25ee
					
				
					 3 changed files with 205 additions and 5 deletions
				
			
		
							
								
								
									
										162
									
								
								AideDeJeu/AideDeJeu/ViewModels/Library/ItemViewModel.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								AideDeJeu/AideDeJeu/ViewModels/Library/ItemViewModel.cs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,162 @@ | |||
| using AideDeJeuLib; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Diagnostics; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading; | ||||
| using System.Threading.Tasks; | ||||
| using System.Windows.Input; | ||||
| using Xamarin.Forms; | ||||
| 
 | ||||
| namespace AideDeJeu.ViewModels.Library | ||||
| { | ||||
|     public class ItemViewModel : BaseViewModel | ||||
|     { | ||||
|         Item _Item = null; | ||||
|         public Item Item | ||||
|         { | ||||
|             get { return _Item; } | ||||
|             set | ||||
|             { | ||||
|                 SetProperty(ref _Item, value); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         CancellationTokenSource cancellationTokenSource; | ||||
| 
 | ||||
|         public ItemViewModel(Item item = null) | ||||
|         { | ||||
|             Title = item?.Name; | ||||
|             Item = item; | ||||
|             LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommandAsync().ConfigureAwait(false)); | ||||
|             SearchCommand = new Command<string>((text) => | ||||
|             { | ||||
|                 if (Filter != null) | ||||
|                 { | ||||
|                     Filter.SearchText = text; | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|         public Command<string> SearchCommand { get; private set; } | ||||
|         public ICommand LoadItemsCommand { get; protected set; } | ||||
| 
 | ||||
|         private FilterViewModel _Filter; | ||||
|         public FilterViewModel Filter | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return _Filter; | ||||
|             } | ||||
|             set | ||||
|             { | ||||
|                 SetProperty(ref _Filter, value); | ||||
|                 if (_Filter != null) | ||||
|                 { | ||||
|                     _Filter.LoadItemsCommand = LoadItemsCommand; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public Item _Items = new Item(); | ||||
|         public Item Items | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return _Items; | ||||
|             } | ||||
|             set | ||||
|             { | ||||
|                 SetProperty(ref _Items, value); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public IEnumerable<Item> _Children = new List<Item>(); | ||||
|         public IEnumerable<Item> Children | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return _Children; | ||||
|             } | ||||
|             set | ||||
|             { | ||||
|                 SetProperty(ref _Children, value); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private Item _SelectedItem; | ||||
|         public Item SelectedItem | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return _SelectedItem; | ||||
|             } | ||||
|             set | ||||
|             { | ||||
|                 SetProperty(ref _SelectedItem, value); | ||||
|                 if (_SelectedItem != null) | ||||
|                 { | ||||
|                     if (_SelectedItem is LinkItem) | ||||
|                     { | ||||
|                         Main.Navigator.NavigateToLinkAsync("/" + (_SelectedItem as LinkItem).Link).ConfigureAwait(true); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         Main.Navigator.GotoItemDetailPageAsync(_SelectedItem).ConfigureAwait(true); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private Item _AllItems; | ||||
|         public Item AllItems | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return _AllItems; | ||||
|             } | ||||
|             set | ||||
|             { | ||||
|                 _AllItems = value; | ||||
|                 if (_AllItems != null) | ||||
|                 { | ||||
|                     Title = _AllItems.Name; | ||||
|                     Filter = _AllItems.GetNewFilterViewModel(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         async Task LoadItemsAsync(CancellationToken cancellationToken = default) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 if (Filter != null) | ||||
|                 { | ||||
|                     var start = DateTime.Now; | ||||
|                     var items = await Task.Run(async () => await Filter.GetFilteredItemsAsync(cancellationToken: cancellationToken)); | ||||
|                     var end = DateTime.Now; | ||||
|                     Debug.WriteLine((end - start).TotalMilliseconds); | ||||
|                     Items = new Item(items.ToList()); | ||||
|                     Children = items; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     Items = AllItems; | ||||
|                     //Children = await AllItems.GetChildrenAsync(); | ||||
|                 } | ||||
|             } | ||||
|             catch (OperationCanceledException ex) | ||||
|             { | ||||
|                 Debug.WriteLine(ex); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public async Task ExecuteLoadItemsCommandAsync() | ||||
|         { | ||||
|             cancellationTokenSource?.Cancel(); | ||||
|             cancellationTokenSource = new CancellationTokenSource(); | ||||
|             await LoadItemsAsync(cancellationTokenSource.Token); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
|  | @ -11,6 +11,7 @@ | |||
|         <ResourceDictionary> | ||||
|             <tools:MonsterMarkdownTheme x:Key="MonsterMarkdownTheme" /> | ||||
|             <tools:NullToFalseConverter x:Key="NullToFalseConverter" /> | ||||
|             <tools:HeaderLevelToStyleConverter x:Key="HeaderLevelToStyleConverter" /> | ||||
|         </ResourceDictionary> | ||||
|     </ContentPage.Resources> | ||||
|     <ContentPage.ToolbarItems> | ||||
|  | @ -18,13 +19,32 @@ | |||
|         <ToolbarItem Name="Print" Text="Générer un PDF" Order="Primary" Icon="scroll_unfurled.png" Command="{Binding Main.Navigator.GeneratePDFCommand}" CommandParameter="{Binding Item.Markdown}" /> | ||||
|     </ContentPage.ToolbarItems> | ||||
|     <Grid> | ||||
|         <ScrollView Orientation="Vertical" BackgroundColor="{StaticResource HDWhite}"> | ||||
|         <!--<ScrollView Orientation="Vertical" BackgroundColor="{StaticResource HDWhite}"> | ||||
|             <mdview:MarkdownView  | ||||
|                 Theme="{StaticResource MonsterMarkdownTheme}"  | ||||
|                 Markdown="{Binding Item.Item.Markdown}"  | ||||
|                 NavigateToLinkCommand="{Binding Main.Navigator.NavigateToLinkCommand}" | ||||
|                 /> | ||||
|         </ScrollView> | ||||
|         </ScrollView>--> | ||||
|         <ListView Grid.Column="0" Grid.Row="0" x:Name="ItemsListView" ItemsSource="{Binding Item.Children}" VerticalOptions="FillAndExpand" HasUnevenRows="true" CachingStrategy="RecycleElement" SelectedItem="{Binding Item.SelectedItem}" ItemTapped="ItemsListView_ItemTapped"> | ||||
|             <ListView.Header> | ||||
|                 <mdview:MarkdownView  | ||||
|                 Theme="{StaticResource MonsterMarkdownTheme}"  | ||||
|                 Markdown="{Binding Item.Item.Markdown}"  | ||||
|                 NavigateToLinkCommand="{Binding Main.Navigator.NavigateToLinkCommand}" | ||||
|                 /> | ||||
|             </ListView.Header> | ||||
|             <ListView.ItemTemplate> | ||||
|                 <DataTemplate> | ||||
|                     <ViewCell> | ||||
|                         <StackLayout Padding="10" Orientation="Vertical"> | ||||
|                             <Label Text="{Binding Name}" LineBreakMode="WordWrap" TextColor="{StaticResource HDBlue}" Style="{Binding NameLevel,Converter={StaticResource HeaderLevelToStyleConverter}, ConverterParameter=2}" /> | ||||
|                             <Label Text="{Binding AltNameText}" LineBreakMode="WordWrap" TextColor="{StaticResource HDLightGrey}" Style="{Binding NameLevel,Converter={StaticResource HeaderLevelToStyleConverter}, ConverterParameter=4}" /> | ||||
|                         </StackLayout> | ||||
|                     </ViewCell> | ||||
|                 </DataTemplate> | ||||
|             </ListView.ItemTemplate> | ||||
|         </ListView> | ||||
|         <ActivityIndicator  | ||||
|             VerticalOptions="StartAndExpand" | ||||
|             HorizontalOptions="End" | ||||
|  |  | |||
|  | @ -28,8 +28,8 @@ namespace AideDeJeu.Views.Library | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private ItemDetailViewModel _Item = null; | ||||
|         public ItemDetailViewModel Item | ||||
|         private ItemViewModel _Item = null; | ||||
|         public ItemViewModel Item | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|  | @ -99,8 +99,19 @@ namespace AideDeJeu.Views.Library | |||
|             { | ||||
|                 var items = item; // as Items; | ||||
|                 var filterViewModel = items.GetNewFilterViewModel(); | ||||
|                 var itemsViewModel = new ItemDetailViewModel() { Item = items }; | ||||
|                 var itemsViewModel = new ItemViewModel() { Item = items, AllItems = items, Filter = filterViewModel }; | ||||
|                 this.Item = itemsViewModel; | ||||
|                 itemsViewModel.LoadItemsCommand.Execute(null); | ||||
|                 if (!string.IsNullOrEmpty(with)) | ||||
|                 { | ||||
|                     var swith = with.Split('_'); | ||||
|                     for (int i = 0; i < swith.Length / 2; i++) | ||||
|                     { | ||||
|                         var key = swith[i * 2 + 0]; | ||||
|                         var val = swith[i * 2 + 1]; | ||||
|                         filterViewModel.FilterWith(key, val); | ||||
|                     } | ||||
|                 } | ||||
|                 //SwitchToMainTab(); | ||||
|                 //if (filterViewModel == null) | ||||
|                 //{ | ||||
|  | @ -118,6 +129,13 @@ namespace AideDeJeu.Views.Library | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private void ItemsListView_ItemTapped(object sender, ItemTappedEventArgs e) | ||||
|         { | ||||
|             if (e.Item == null) return; | ||||
|             ((ListView)sender).SelectedItem = null; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         protected bool SetProperty<T>(ref T backingStore, T value, | ||||
|             [CallerMemberName]string propertyName = "", | ||||
|             Action onChanged = null) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez