Fixed issue navigating away and back to tab view

This commit is contained in:
watsonb8 2019-12-23 19:06:03 -05:00
parent f691deab6a
commit 109457d6fa
3 changed files with 34 additions and 7 deletions

View File

@ -153,7 +153,7 @@ namespace Aurora.Design.Components.TabView
} }
} }
SetCurrentTab(0, true); SetCurrentTab(SelectedTabIndex, true);
} }
} }
@ -439,7 +439,13 @@ namespace Aurora.Design.Components.TabView
#endregion #endregion
#region SelectedTabIndex #region SelectedTabIndex
public static readonly BindableProperty SelectedTabIndexProperty = BindableProperty.Create(nameof(SelectedTabIndex), typeof(int), typeof(TabViewControl), 0, propertyChanged: OnSelectedTabIndexChanged); public static readonly BindableProperty SelectedTabIndexProperty = BindableProperty.Create(
nameof(SelectedTabIndex),
typeof(int),
typeof(TabViewControl),
defaultValue: 0,
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: OnSelectedTabIndexChanged);
private static void OnSelectedTabIndexChanged(BindableObject bindable, object oldValue, object newValue) private static void OnSelectedTabIndexChanged(BindableObject bindable, object oldValue, object newValue)
{ {
if (bindable is TabViewControl tabViewControl && tabViewControl.ItemSource != null) if (bindable is TabViewControl tabViewControl && tabViewControl.ItemSource != null)
@ -477,14 +483,25 @@ namespace Aurora.Design.Components.TabView
if (((position >= 0 && position < ItemSource.Count) || initialRun)) if (((position >= 0 && position < ItemSource.Count) || initialRun))
{ {
if (oldPosition < ItemSource.Count && _mainContainerSL.Children.Count == 2) if (oldPosition < ItemSource.Count)
{ {
ItemSource[oldPosition].IsCurrent = false; List<bool> tabActiveList = ItemSource.Select((TabItem tab, int index) =>
//Remove second child {
_mainContainerSL.Children.RemoveAt(1); return index == position;
})
.ToList();
for (int i = 0; i < tabActiveList.Count(); i++)
{
ItemSource[i].IsCurrent = tabActiveList[i];
}
// Remove second child
if (_mainContainerSL.Children.Count == 2)
{
_mainContainerSL.Children.RemoveAt(1);
}
} }
_mainContainerSL.Children.Add(ItemSource[position].Content); _mainContainerSL.Children.Add(ItemSource[position].Content);
ItemSource[position].IsCurrent = true;
SelectedTabIndex = position; SelectedTabIndex = position;
Device.BeginInvokeOnMainThread(async () => await _tabHeadersContainerSv.ScrollToAsync(_headerContainerGrid.Children[position], ScrollToPosition.MakeVisible, false)); Device.BeginInvokeOnMainThread(async () => await _tabHeadersContainerSv.ScrollToAsync(_headerContainerGrid.Children[position], ScrollToPosition.MakeVisible, false));

View File

@ -18,6 +18,7 @@
HorizontalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
TabSizeOption="100" TabSizeOption="100"
SelectedTabIndex="{Binding SelectedTabIndex}"
HeaderBackgroundColor="#232323" HeaderBackgroundColor="#232323"
x:Name="TabView"> x:Name="TabView">
<tabView:TabViewControl.ItemSource> <tabView:TabViewControl.ItemSource>

View File

@ -34,6 +34,8 @@ namespace Aurora.Design.Views.Party
private BaseMedia _selectedMedia; private BaseMedia _selectedMedia;
private ClientService _client; private ClientService _client;
private int _selectedTabIndex;
public PartyViewModel() public PartyViewModel()
{ {
_members = new ObservableCollection<PartyMember>(); _members = new ObservableCollection<PartyMember>();
@ -59,6 +61,12 @@ namespace Aurora.Design.Views.Party
#region Properties #region Properties
public int SelectedTabIndex
{
get { return _selectedTabIndex; }
set { SetProperty(ref _selectedTabIndex, value); }
}
/// <summary> /// <summary>
/// Publc property for the members list /// Publc property for the members list
/// </summary> /// </summary>
@ -119,6 +127,7 @@ namespace Aurora.Design.Views.Party
/// <returns></returns> /// <returns></returns>
public override async Task OnActive() public override async Task OnActive()
{ {
OnPropertyChanged("SelectedTabIndex");
if (this._state == PartyState.Hosting || if (this._state == PartyState.Hosting ||
this._state == PartyState.InParty) this._state == PartyState.InParty)
{ {