Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions 08-TabbedNavigation/ReadMe.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
# Tabbed Navigation

TODO
[Tabbed Page Docs](https://prismlibrary.github.io/docs/xamarin-forms/navigation/working-with-tabbedpages.html)

- Show Creating a Tabbed Page with tabs via querystring
- Show Selecting the visible tab via querystring
- Show Changing Tabs
## This example shows the following

- Creating a tab page in xaml and navigating to a tab with the query string
- Create tabs at runtime with the query string
- Navigating to a tab via the query string
- Changing to another tab with the navigation service
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace PrismSample.Droid
{
[Application(
Label = "Prism Sample",
Label = "Tabbed Navigation",
Icon = "@mipmap/icon"
)]
public class MainApplication : Application
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,4 +104,9 @@
<AndroidResource Include="Resources\drawable\splash_screen.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
<UserProperties XamarinHotReloadXFormsNugetUpgradeInfoBarPrismSampleAndroidHideInfoBar="True" />
</VisualStudio>
</ProjectExtensions>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -159,4 +159,9 @@
<VisualStudioVersion>14.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
<UserProperties XamarinHotReloadXFormsNugetUpgradeInfoBarPrismSampleUWPHideInfoBar="True" />
</VisualStudio>
</ProjectExtensions>
</Project>
2 changes: 1 addition & 1 deletion 08-TabbedNavigation/src/PrismSample/App.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<Color x:Key="AccentColor">#00A5F2</Color>
<Color x:Key="TextColor">White</Color>

<Style TargetType="TabbedPage">
<Style TargetType="TabbedPage" ApplyToDerivedTypes="True">
<Setter Property="BarBackgroundColor" Value="{StaticResource PrimaryColor}" />
<Setter Property="BarTextColor" Value="{StaticResource TextColor}" />
<Setter Property="SelectedTabColor" Value="{StaticResource AccentColor}" />
Expand Down
7 changes: 7 additions & 0 deletions 08-TabbedNavigation/src/PrismSample/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,14 @@ protected override async void OnInitialized()
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<NavigationPage>();
containerRegistry.RegisterForNavigation<TabbedPage>();

containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
containerRegistry.RegisterForNavigation<TabsPage, TabsPageViewModel>();

containerRegistry.RegisterForNavigation<TabAPage, TabAPageViewModel>();
containerRegistry.RegisterForNavigation<TabBPage, TabBPageViewModel>();
containerRegistry.RegisterForNavigation<TabCPage, TabCPageViewModel>();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
using System;
using System.Collections.Generic;
using System.Text;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;

namespace PrismSample.ViewModels
{
public class MainPageViewModel : BindableBase
{
private INavigationService _navigationService { get; }

public MainPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;

// Creating a shortcut for the CreateTab constant
const string selectedTab = KnownNavigationParameters.SelectedTab;

//Navigating to and selecting the TabA with the created parameter
_navigationService.NavigateAsync("TabsPage?" + $"?{selectedTab}=TabAPage");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Prism.Navigation;

namespace PrismSample.ViewModels
{
public class TabAPageViewModel : TabPageViewModelBase
{
public TabAPageViewModel(INavigationService navigationService) : base(navigationService)
{
Title = "A";
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Prism.Navigation;

namespace PrismSample.ViewModels
{
public class TabBPageViewModel : TabPageViewModelBase
{
public TabBPageViewModel(INavigationService navigationService) : base(navigationService)
{
Title = "B";
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using Prism.Commands;
using Prism.Navigation;
using Prism.Navigation.TabbedPages;

namespace PrismSample.ViewModels
{
public class TabCPageViewModel : TabPageViewModelBase
{
private INavigationService _navigationService;
public DelegateCommand NavigateTabACommand { get; set; }

public TabCPageViewModel(INavigationService navigationService) : base(navigationService)
{
_navigationService = navigationService;
NavigateTabACommand = new DelegateCommand(NavigateTabA);
Title = "C";
}

private async void NavigateTabA()
{
await _navigationService.SelectTabAsync("TabAPage");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using Prism.Mvvm;
using System;
using Prism;
using Prism.Navigation;

namespace PrismSample.ViewModels
{
public class TabPageViewModelBase : BindableBase, IActiveAware, IInitialize
{
private readonly INavigationService _navigationService;

private string _title;
public string Title
{
get => _title;
set => SetProperty(ref _title, value);
}

private bool _isActive;
public bool IsActive
{
get => _isActive;
set => SetProperty(ref _isActive, value, RaiseIsActiveChanged);
}

private int _activeCount;
public int ActiveCount
{
get => _activeCount;
set => SetProperty(ref _activeCount, value);
}

public event EventHandler IsActiveChanged;

public TabPageViewModelBase(INavigationService navigationService)
{
_navigationService = navigationService;
}

public void Initialize(INavigationParameters parameters)
{
if (parameters.ContainsKey("ActiveCount"))
{
ActiveCount = parameters.GetValue<int>("ActiveCount");
}
}

private void RaiseIsActiveChanged()
{
IsActiveChanged?.Invoke(this, EventArgs.Empty);

if (IsActive)
{
ActiveCount++;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;

namespace PrismSample.ViewModels
{
public class TabsPageViewModel : BindableBase
{
public TabsPageViewModel()
{

}
}
}
15 changes: 8 additions & 7 deletions 08-TabbedNavigation/src/PrismSample/Views/MainPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://prismlibrary.com"
xmlns:viewModels="clr-namespace:PrismSample.ViewModels;assembly=PrismSample"
mc:Ignorable="d"
Title="Main Page"
x:Class="PrismSample.Views.MainPage">
x:Class="PrismSample.Views.MainPage"
prism:ViewModelLocator.AutowireViewModel="True"
Title="Main Page">

<StackLayout>
<Label Text="Welcome to Xamarin.Forms!"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
</StackLayout>
<StackLayout VerticalOptions="CenterAndExpand">

</StackLayout>

</ContentPage>
14 changes: 14 additions & 0 deletions 08-TabbedNavigation/src/PrismSample/Views/TabAPage.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="http://prismlibrary.com"
x:Class="PrismSample.Views.TabAPage"
prism:ViewModelLocator.AutowireViewModel="True"
Title="Tab A">

<StackLayout VerticalOptions="CenterAndExpand">
<Label Text="{Binding ActiveCount, StringFormat='Number of times this tab has been activated : {0}'}" HorizontalTextAlignment="Center" />
<Label Text="{Binding Title, StringFormat='Tab {0} Content'}" HorizontalTextAlignment="Center" />
</StackLayout>

</ContentPage>
12 changes: 12 additions & 0 deletions 08-TabbedNavigation/src/PrismSample/Views/TabAPage.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Xamarin.Forms;

namespace PrismSample.Views
{
public partial class TabAPage : ContentPage
{
public TabAPage()
{
InitializeComponent();
}
}
}
13 changes: 13 additions & 0 deletions 08-TabbedNavigation/src/PrismSample/Views/TabBPage.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="http://prismlibrary.com"
x:Class="PrismSample.Views.TabBPage"
prism:ViewModelLocator.AutowireViewModel="True"
Title="Tab B">

<StackLayout VerticalOptions="CenterAndExpand">
<Label Text="{Binding Title, StringFormat='Tab {0} Content'}" HorizontalTextAlignment="Center" />
</StackLayout>

</ContentPage>
12 changes: 12 additions & 0 deletions 08-TabbedNavigation/src/PrismSample/Views/TabBPage.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Xamarin.Forms;

namespace PrismSample.Views
{
public partial class TabBPage : ContentPage
{
public TabBPage()
{
InitializeComponent();
}
}
}
14 changes: 14 additions & 0 deletions 08-TabbedNavigation/src/PrismSample/Views/TabCPage.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="http://prismlibrary.com"
x:Class="PrismSample.Views.TabCPage"
prism:ViewModelLocator.AutowireViewModel="True"
Title="Tab C">

<StackLayout VerticalOptions="CenterAndExpand">
<Label Text="{Binding Title, StringFormat='Tab {0} Content'}" HorizontalTextAlignment="Center" />
<Button Text="Go To Tab A" HorizontalOptions="CenterAndExpand" Command="{Binding NavigateTabACommand}" />
</StackLayout>

</ContentPage>
12 changes: 12 additions & 0 deletions 08-TabbedNavigation/src/PrismSample/Views/TabCPage.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Xamarin.Forms;

namespace PrismSample.Views
{
public partial class TabCPage : ContentPage
{
public TabCPage()
{
InitializeComponent();
}
}
}
15 changes: 15 additions & 0 deletions 08-TabbedNavigation/src/PrismSample/Views/TabsPage.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="http://prismlibrary.com"
xmlns:views="clr-namespace:PrismSample.Views;assembly=PrismSample"
x:Class="PrismSample.Views.TabsPage"
prism:ViewModelLocator.AutowireViewModel="True">

<TabbedPage.Children>
<views:TabAPage Title="{Binding Title}" />
<views:TabBPage Title="{Binding Title}" />
<views:TabCPage Title="{Binding Title}" />
</TabbedPage.Children>

</TabbedPage>
12 changes: 12 additions & 0 deletions 08-TabbedNavigation/src/PrismSample/Views/TabsPage.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Xamarin.Forms;

namespace PrismSample.Views
{
public partial class TabsPage : TabbedPage
{
public TabsPage()
{
InitializeComponent();
}
}
}
Loading