From d0701dc686c86d9206be8370c3d7ef92dbda7d45 Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Mon, 14 Oct 2019 14:53:18 +0200 Subject: [PATCH] Refactor / binding --- .../AideDeJeu/Tools/BindableToolbarItem.cs | 51 +++ .../AideDeJeu/ViewModels/MainViewModel.cs | 22 ++ .../AideDeJeu/Views/Library/ItemPage.xaml | 13 +- .../AideDeJeu/Views/Library/ItemPage.xaml.cs | 108 +------ AideDeJeu/AideDeJeu/Views/MainShell.xaml | 10 +- AideDeJeu/AideDeJeu/Views/MainShell.xaml.cs | 298 +++++++++--------- 6 files changed, 238 insertions(+), 264 deletions(-) create mode 100644 AideDeJeu/AideDeJeu/Tools/BindableToolbarItem.cs diff --git a/AideDeJeu/AideDeJeu/Tools/BindableToolbarItem.cs b/AideDeJeu/AideDeJeu/Tools/BindableToolbarItem.cs new file mode 100644 index 00000000..c83c17ed --- /dev/null +++ b/AideDeJeu/AideDeJeu/Tools/BindableToolbarItem.cs @@ -0,0 +1,51 @@ +using Xamarin.Forms; + +namespace AideDeJeu.Tools +{ + public class BindableToolbarItem : ToolbarItem + { + public static readonly BindableProperty IsVisibleProperty = + BindableProperty.Create("BindableToolbarItem", typeof(bool), typeof(ToolbarItem), + true, BindingMode.TwoWay, propertyChanged: OnIsVisibleChanged); + + public BindableToolbarItem() + { + InitVisibility(); + } + + public bool IsVisible + { + get { return (bool)GetValue(IsVisibleProperty); } + set { SetValue(IsVisibleProperty, value); } + } + + private void InitVisibility() + { + OnIsVisibleChanged(this, false, IsVisible); + } + + private static void OnIsVisibleChanged(BindableObject bindable, object oldvalue, object newvalue) + { + var item = bindable as BindableToolbarItem; + + if (item != null && item.Parent == null) + return; + + if (item != null) + { + var items = ((Page)item.Parent)?.ToolbarItems; + + if (Equals(items, null)) return; + if ((bool)newvalue && !items.Contains(item)) + { + //Device.BeginInvokeOnMainThread(() => { items.Add(item); }); + Device.BeginInvokeOnMainThread(() => { items.Insert(0, item); }); + } + else if (!(bool)newvalue && items.Contains(item)) + { + Device.BeginInvokeOnMainThread(() => { items.Remove(item); }); + } + } + } + } +} \ No newline at end of file diff --git a/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs index 2f938828..2bbc7b97 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs @@ -226,5 +226,27 @@ namespace AideDeJeu.ViewModels SetProperty(ref _CurrentItem, value); } } + + private bool _FilterIsPresented = false; + public bool FilterIsPresented + { + get + { + return _FilterIsPresented; + } + set + { + SetProperty(ref _FilterIsPresented, value); + } + } + + private Command _ChangeFilterIsPresentedCommand = null; + public Command ChangeFilterIsPresentedCommand + { + get + { + return _ChangeFilterIsPresentedCommand ?? (_ChangeFilterIsPresentedCommand = new Command(() => FilterIsPresented = !FilterIsPresented)); + } + } } } \ No newline at end of file diff --git a/AideDeJeu/AideDeJeu/Views/Library/ItemPage.xaml b/AideDeJeu/AideDeJeu/Views/Library/ItemPage.xaml index 1ce07c23..4f537a70 100644 --- a/AideDeJeu/AideDeJeu/Views/Library/ItemPage.xaml +++ b/AideDeJeu/AideDeJeu/Views/Library/ItemPage.xaml @@ -21,9 +21,10 @@ - - - + + + + - +