mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-12-16 07:10:32 +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>
|
<ResourceDictionary>
|
||||||
<tools:MonsterMarkdownTheme x:Key="MonsterMarkdownTheme" />
|
<tools:MonsterMarkdownTheme x:Key="MonsterMarkdownTheme" />
|
||||||
<tools:NullToFalseConverter x:Key="NullToFalseConverter" />
|
<tools:NullToFalseConverter x:Key="NullToFalseConverter" />
|
||||||
|
<tools:HeaderLevelToStyleConverter x:Key="HeaderLevelToStyleConverter" />
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</ContentPage.Resources>
|
</ContentPage.Resources>
|
||||||
<ContentPage.ToolbarItems>
|
<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}" />
|
<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>
|
</ContentPage.ToolbarItems>
|
||||||
<Grid>
|
<Grid>
|
||||||
<ScrollView Orientation="Vertical" BackgroundColor="{StaticResource HDWhite}">
|
<!--<ScrollView Orientation="Vertical" BackgroundColor="{StaticResource HDWhite}">
|
||||||
<mdview:MarkdownView
|
<mdview:MarkdownView
|
||||||
Theme="{StaticResource MonsterMarkdownTheme}"
|
Theme="{StaticResource MonsterMarkdownTheme}"
|
||||||
Markdown="{Binding Item.Item.Markdown}"
|
Markdown="{Binding Item.Item.Markdown}"
|
||||||
NavigateToLinkCommand="{Binding Main.Navigator.NavigateToLinkCommand}"
|
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
|
<ActivityIndicator
|
||||||
VerticalOptions="StartAndExpand"
|
VerticalOptions="StartAndExpand"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@ namespace AideDeJeu.Views.Library
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ItemDetailViewModel _Item = null;
|
private ItemViewModel _Item = null;
|
||||||
public ItemDetailViewModel Item
|
public ItemViewModel Item
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|
@ -99,8 +99,19 @@ namespace AideDeJeu.Views.Library
|
||||||
{
|
{
|
||||||
var items = item; // as Items;
|
var items = item; // as Items;
|
||||||
var filterViewModel = items.GetNewFilterViewModel();
|
var filterViewModel = items.GetNewFilterViewModel();
|
||||||
var itemsViewModel = new ItemDetailViewModel() { Item = items };
|
var itemsViewModel = new ItemViewModel() { Item = items, AllItems = items, Filter = filterViewModel };
|
||||||
this.Item = itemsViewModel;
|
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();
|
//SwitchToMainTab();
|
||||||
//if (filterViewModel == null)
|
//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,
|
protected bool SetProperty<T>(ref T backingStore, T value,
|
||||||
[CallerMemberName]string propertyName = "",
|
[CallerMemberName]string propertyName = "",
|
||||||
Action onChanged = null)
|
Action onChanged = null)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue