1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-30 15:06:06 +00:00

Recablage filtres

This commit is contained in:
Yan Maniez 2018-07-14 00:58:17 +02:00
parent e04be9e458
commit c4c7c87ee8
5 changed files with 59 additions and 41 deletions

View file

@ -109,19 +109,19 @@ namespace AideDeJeu.Tools
public class ItemSourceTypeToStringConverter : ItemSourceTypeConverter<string> { }
public class ItemSourceTypeToFilterConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var vm = DependencyService.Get<ItemsViewModel>();
var itemSourceType = vm.ItemSourceType;
return vm.Main.GetFilterViewModel(itemSourceType).Filters;
}
//public class ItemSourceTypeToFilterConverter : IValueConverter
//{
// public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
// {
// var vm = DependencyService.Get<ItemsViewModel>();
// var itemSourceType = vm.ItemSourceType;
// return vm.Main.GetFilterViewModel(itemSourceType).Filters;
// }
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
// {
// return null;
// }
//}
}

View file

@ -10,7 +10,7 @@ namespace AideDeJeu.ViewModels
{
public abstract class FilterViewModel : BaseViewModel
{
public ICommand LoadItemsCommand { get; protected set; }
public ICommand LoadItemsCommand { get; set; }
public abstract Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken cancellationToken = default);
public abstract IEnumerable<Filter> Filters { get; }
private string _SearchText = "";
@ -23,10 +23,27 @@ namespace AideDeJeu.ViewModels
set
{
SetProperty(ref _SearchText, value);
//Main.LoadItemsCommand.Execute(null);
LoadItemsCommand.Execute(null);
}
}
protected void RegisterFilters()
{
foreach (var filter in Filters)
{
filter.PropertyChanged += Filter_PropertyChanged;
}
}
protected void Filter_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "Index")
{
LoadItemsCommand.Execute(null);
}
}
}
public enum FilterKeys
@ -64,7 +81,6 @@ namespace AideDeJeu.ViewModels
if (_Index != value)
{
SetProperty(ref _Index, value);
Main.LoadItemsCommand.Execute(null);
}
}
}
@ -95,6 +111,7 @@ namespace AideDeJeu.ViewModels
_Filters = new List<Filter>()
{
};
RegisterFilters();
}
return _Filters;
}
@ -140,12 +157,12 @@ namespace AideDeJeu.ViewModels
new Filter() { Key = FilterKeys.Ritual, Name = "Rituel", KeyValues = Rituels, _Index = 0 },
new Filter() { Key = FilterKeys.Source, Name = "Source", KeyValues = Sources, _Index = 0 },
};
RegisterFilters();
}
return _Filters;
}
}
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default)
{
return await Task.Run(() =>
@ -378,6 +395,7 @@ namespace AideDeJeu.ViewModels
//new Filter() { Key = FilterKeys.Legendary, Name = "Légendaire", KeyValues = Legendaries, _Index = 0 },
new Filter() { Key = FilterKeys.Source, Name = "Source", KeyValues = Sources, _Index = 0 },
};
RegisterFilters();
}
return _Filters;
}

View file

@ -17,9 +17,15 @@ namespace AideDeJeu.ViewModels
public ItemsViewModel(ItemSourceType itemSourceType)
{
this.ItemSourceType = itemSourceType;
Filter = Main.GetFilterViewModel(ItemSourceType);
LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommandAsync().ConfigureAwait(false));
Filter = Main.GetFilterViewModel(ItemSourceType);
Filter.LoadItemsCommand = LoadItemsCommand;
SearchCommand = new Command<string>((text) =>
{
Filter.SearchText = text;
});
}
public Command<string> SearchCommand { get; private set; }
public ICommand LoadItemsCommand { get; protected set; }
public async Task ExecuteGotoItemCommandAsync(Item item)
{

View file

@ -101,34 +101,34 @@ namespace AideDeJeu.ViewModels
}
}
public Dictionary<ItemSourceType, Lazy<ItemsViewModel>> AllItemsViewModel = new Dictionary<ItemSourceType, Lazy<ItemsViewModel>>()
public Dictionary<ItemSourceType, Func<ItemsViewModel>> AllItemsViewModel = new Dictionary<ItemSourceType, Func<ItemsViewModel>>()
{
{ ItemSourceType.SpellVO, new Lazy<ItemsViewModel>(() => new ItemsViewModel(ItemSourceType.SpellVO)) },
{ ItemSourceType.SpellHD, new Lazy<ItemsViewModel>(() => new ItemsViewModel(ItemSourceType.SpellHD)) },
{ ItemSourceType.MonsterVO, new Lazy<ItemsViewModel>(() => new ItemsViewModel(ItemSourceType.MonsterVO)) },
{ ItemSourceType.MonsterHD, new Lazy<ItemsViewModel>(() => new ItemsViewModel(ItemSourceType.MonsterHD)) },
{ ItemSourceType.ConditionHD, new Lazy<ItemsViewModel>(() => new ItemsViewModel(ItemSourceType.ConditionHD)) },
{ ItemSourceType.ConditionVO, new Lazy<ItemsViewModel>(() => new ItemsViewModel(ItemSourceType.ConditionVO)) },
{ ItemSourceType.SpellVO, () => new ItemsViewModel(ItemSourceType.SpellVO) },
{ ItemSourceType.SpellHD, () => new ItemsViewModel(ItemSourceType.SpellHD) },
{ ItemSourceType.MonsterVO, () => new ItemsViewModel(ItemSourceType.MonsterVO) },
{ ItemSourceType.MonsterHD, () => new ItemsViewModel(ItemSourceType.MonsterHD) },
{ ItemSourceType.ConditionHD, () => new ItemsViewModel(ItemSourceType.ConditionHD) },
{ ItemSourceType.ConditionVO, () => new ItemsViewModel(ItemSourceType.ConditionVO) },
};
public ItemsViewModel GetItemsViewModel(ItemSourceType itemSourceType)
{
return AllItemsViewModel[itemSourceType].Value;
return AllItemsViewModel[itemSourceType].Invoke();
}
public Dictionary<ItemSourceType, Lazy<FilterViewModel>> AllFiltersViewModel = new Dictionary<ItemSourceType, Lazy<FilterViewModel>>()
public Dictionary<ItemSourceType, Func<FilterViewModel>> AllFiltersViewModel = new Dictionary<ItemSourceType, Func<FilterViewModel>>()
{
{ ItemSourceType.SpellVO, new Lazy<FilterViewModel>(() => new VOSpellFilterViewModel()) },
{ ItemSourceType.SpellHD, new Lazy<FilterViewModel>(() => new HDSpellFilterViewModel()) },
{ ItemSourceType.MonsterVO, new Lazy<FilterViewModel>(() => new VOMonsterFilterViewModel()) },
{ ItemSourceType.MonsterHD, new Lazy<FilterViewModel>(() => new HDMonsterFilterViewModel()) },
{ ItemSourceType.ConditionHD, new Lazy<FilterViewModel>(() => new SearchFilterViewModel()) },
{ ItemSourceType.ConditionVO, new Lazy<FilterViewModel>(() => new SearchFilterViewModel()) },
{ ItemSourceType.SpellVO, () => new VOSpellFilterViewModel() },
{ ItemSourceType.SpellHD, () => new HDSpellFilterViewModel() },
{ ItemSourceType.MonsterVO, () => new VOMonsterFilterViewModel() },
{ ItemSourceType.MonsterHD, () => new HDMonsterFilterViewModel() },
{ ItemSourceType.ConditionHD, () => new SearchFilterViewModel() },
{ ItemSourceType.ConditionVO, () => new SearchFilterViewModel() },
};
public FilterViewModel GetFilterViewModel(ItemSourceType itemSourceType)
{
return AllFiltersViewModel[itemSourceType].Value;
return AllFiltersViewModel[itemSourceType].Invoke();
}
// Yan : pas besoin d'ObservableCollection, on ne modifie jamais la liste item par item
@ -153,7 +153,6 @@ namespace AideDeJeu.ViewModels
public Command SwitchToSpellsVO { get; private set; }
public Command SwitchToMonstersVO { get; private set; }
public Command AboutCommand { get; private set; }
public Command<string> SearchCommand { get; private set; }
public Navigator Navigator { get; set; }
@ -173,11 +172,6 @@ namespace AideDeJeu.ViewModels
//SwitchToSpellsVO = new Command(() => ItemSourceType = ItemSourceType.SpellVO);
//SwitchToMonstersVO = new Command(() => ItemSourceType = ItemSourceType.MonsterVO);
AboutCommand = new Command(async () => await Main.Navigator.GotoAboutPageAsync());
SearchCommand = new Command<string>(async (text) =>
{
//GetFilterViewModel(ItemSourceType).SearchText = text;
//await GetItemsViewModel(ItemSourceType).ExecuteLoadItemsCommandAsync();
});
}
ItemSourceType MDFileToItemSourceType(string file)

View file

@ -14,7 +14,7 @@
<MasterDetailPage.Resources>
<ResourceDictionary>
<tools:ItemSourceTypeToStringConverter x:Key="ItemSourceTypeToTitleConverter" SpellVO="Spells" SpellHD="Sorts (H&amp;D)" MonsterVO="Monsters" MonsterHD="Créatures (H&amp;D)" />
<tools:ItemSourceTypeToFilterConverter x:Key="ItemSourceTypeToFilterConverter" />
<!--<tools:ItemSourceTypeToFilterConverter x:Key="ItemSourceTypeToFilterConverter" />-->
</ResourceDictionary>
</MasterDetailPage.Resources>
<MasterDetailPage.Master>