Hi, I have a little problem with my application.
It takes ages to navigate between pages.
My UIs are quite complex and some of the views have 1300lines of xaml code.
It takes around 4-5 seconds to change from one view to another. The xaml compilation is enebled.
public class Navigation
{
// MAIN NAVIGATION, YOU CAN DEFINE MORE NAVIGATION TABS IN CONSTRUCTOR
// List of navigation tabs
public ObservableCollection<NavigationItem> NavigationItems { get; set; }
Main MainPage { get; set; }
Trends TrendsPage { get; set; }
Settings SettingsPage { get; set; }
//HOT_App.Views.Settings SettingsWindow;
public Navigation()
{
NavigationItems = new ObservableCollection<NavigationItem>();
NavigationItem Home = new NavigationItem("Home", "NavigationHome.png", true);
NavigationItem Trends = new NavigationItem("Trends", "NavigationTrend.png", false);
NavigationItem Settings = new NavigationItem("Settings", "SettingsIcon.png", false);
NavigationItems.Add(Home);
NavigationItems.Add(Trends);
NavigationItems.Add(Settings);
}
public void ShowActiveNavigation()
{
System.Diagnostics.Debug.WriteLine(string.Join<NavigationItem>("\n", NavigationItems));
}
// navigation logic
public async void SetActiveNavigation(string activeNavigationName)
{
NavigationItems[0].Active = false;
NavigationItems[1].Active = false;
NavigationItems[2].Active = false;
//ChangeActiveValue(activeNavigationName);
switch (activeNavigationName)
{
case "Home":
NavigationItems[0].Active = true;
//Application.Current.MainPage.Navigation.PopAsync(false);
await Application.Current.MainPage.Navigation.PushAsync(new Main(), false);
System.Diagnostics.Debug.WriteLine("Home");
break;
case "Trends":
NavigationItems[1].Active = true;
//Application.Current.MainPage.Navigation.PopAsync(false);
await Application.Current.MainPage.Navigation.PushAsync(new MainPage(), false);
System.Diagnostics.Debug.WriteLine("Trends");
break;
case "Settings":
NavigationItems[2].Active = true;
//Application.Current.MainPage.Navigation.PopAsync(false);
await Application.Current.MainPage.Navigation.PushAsync(new HOT_App.Views.Settings(), false);
System.Diagnostics.Debug.WriteLine("Settings");
break;
default:
NavigationItems[0].Active = true;
await Application.Current.MainPage.Navigation.PushAsync(new Main(), false);
System.Diagnostics.Debug.WriteLine("Home");
break;
}
}
// updates active navigation tab
public void ChangeActiveValue(string activeNavigationName)
{
foreach (NavigationItem navigationItem in NavigationItems)
{
if (navigationItem.NavigationItemName == activeNavigationName)
{
navigationItem.Active = true;
}
else { navigationItem.Active = false; }
}
}
}
Is there any way how to reuse the views instead of creating new ones? Like Instead of
Application.Current.MainPage.Navigation.PushAsync(new Main(), false);
I would write soemthing like but it doesnt work
Main Mainpage= new Main();
Application.Current.MainPage.Navigation.PushAsync(Mainpage, false);
Any ideas?