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();
- });
- }
- }
- }
|