| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Collections.ObjectModel;
 
- using System.Collections.Specialized;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using JetBrains.Annotations;
 
- using Xamarin.Forms;
 
- using Xamarin.Forms.Xaml;
 
- namespace InABox.Mobile
 
- {
 
-     [XamlCompilation(XamlCompilationOptions.Compile)]
 
-     public partial class MobilePageStack
 
-     {
 
-         public IList<MobilePageStackItem> Items { get; private set; }
 
-         
 
-         public static readonly BindableProperty SelectedIndexProperty = BindableProperty.Create(
 
-             nameof(SelectedIndex),
 
-             typeof(int),
 
-             typeof(MobilePageStack),
 
-             -1,
 
-             propertyChanged:SelectedIndexChanged);
 
-         private static void SelectedIndexChanged(BindableObject bindable, object oldvalue, object newvalue)
 
-         {
 
-             (bindable as MobilePageStack)?.SelectPage((int)newvalue);
 
-         }
 
-         public void SelectPage(int page)
 
-         {
 
-             SelectPage((page > -1) && (page < Items.Count) ? Items[page] : null);
 
-         }
 
-         private MobilePageStackItem _current = null;
 
-         public void SelectPage([CanBeNull] MobilePageStackItem page)
 
-         {
 
-             if (_current != null)
 
-                 _current.DoDisappearing();
 
-             _current = page;
 
-             Content = _current?.Content;
 
-             _current?.DoAppearing();
 
-             SelectionChanged?.Invoke(this, EventArgs.Empty);
 
-         }
 
-         
 
-         public int SelectedIndex
 
-         {
 
-             get => (int)GetValue(SelectedIndexProperty);
 
-             set => SetValue(SelectedIndexProperty, value);
 
-         }
 
-         
 
-         public static readonly BindableProperty SelectedItemProperty = BindableProperty.Create(
 
-             nameof(SelectedItem),
 
-             typeof(MobilePageStackItem),
 
-             typeof(MobilePageStack),
 
-             propertyChanged:SelectedItemChanged);
 
-         private static void SelectedItemChanged(BindableObject bindable, object oldvalue, object newvalue)
 
-         {
 
-             (bindable as MobilePageStack)?.SelectPage(newvalue as MobilePageStackItem);
 
-         }
 
-         
 
-         public MobilePageStackItem SelectedItem 
 
-         {
 
-             get => GetValue(SelectedItemProperty) as MobilePageStackItem;
 
-             set => SetValue(SelectedItemProperty, value);
 
-         }
 
-         
 
-         public event EventHandler SelectionChanged;
 
-         public void DoSelectionChanged()
 
-         {
 
-             SelectionChanged?.Invoke(this, EventArgs.Empty);
 
-         }
 
-         public MobilePageStack()
 
-         {
 
-             var items = new ObservableCollection<MobilePageStackItem>();
 
-             items.CollectionChanged += ItemsChanged;
 
-             Items = items;
 
-             InitializeComponent();
 
-         }
 
-         private void ItemsChanged(object sender, NotifyCollectionChangedEventArgs e)
 
-         {
 
-             Device.BeginInvokeOnMainThread(() =>
 
-             {
 
-                 SelectedItem ??= Items.FirstOrDefault();
 
-             });
 
-         }
 
-     }
 
- }
 
 
  |