Added: Project SetUp Classes

This commit is contained in:
TheJoKlLa 2020-11-11 15:32:50 +01:00
parent ff0fa63ad3
commit 2d071865e5
14 changed files with 4691 additions and 28 deletions

View File

@ -82,30 +82,78 @@
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json"> <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json">
<Visible>false</Visible> <Visible>false</Visible>
</ImageAsset> </ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-icon 1024.png" /> <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-icon 1024.png">
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneApp_60%402x.png" /> <Visible>false</Visible>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneApp_60%403x.png" /> </ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSpotlight_40%402x.png" /> <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneApp_60%402x.png">
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSpotlight_40%403x.png" /> <Visible>false</Visible>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40-1.png" /> </ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40%402x.png" /> <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneApp_60%403x.png">
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadApp_76.png" /> <Visible>false</Visible>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadApp_76%402x.png" /> </ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadProApp_83.5%402x.png" /> <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSpotlight_40%402x.png">
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\Contents.json" /> <Visible>false</Visible>
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore.png" /> </ImageAsset>
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%402x.png" /> <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSpotlight_40%403x.png">
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%403x.png" /> <Visible>false</Visible>
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%402x-1.png" /> </ImageAsset>
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%403x-1.png" /> <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40-1.png">
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40-3.png" /> <Visible>false</Visible>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%402x.png" /> </ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%403x.png" /> <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40%402x.png">
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29.png" /> <Visible>false</Visible>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%402x-1.png" /> </ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40.png" /> <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadApp_76.png">
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-Icon.png" /> <Visible>false</Visible>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-Icon_20.png" /> </ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadApp_76%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadProApp_83.5%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\Contents.json">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%403x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%402x-1.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%403x-1.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40-3.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%403x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%402x-1.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-Icon.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-Icon_20.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />

View File

@ -1,4 +1,8 @@
using System; using Borepin.Base;
using Borepin.PageModel;
using Borepin.Service.Navigation;
using System;
using System.Threading.Tasks;
using Xamarin.Forms; using Xamarin.Forms;
using Xamarin.Forms.Xaml; using Xamarin.Forms.Xaml;
@ -9,12 +13,17 @@ namespace Borepin
public App() public App()
{ {
InitializeComponent(); InitializeComponent();
MainPage = new MainPage();
} }
protected override void OnStart() Task InitNavigation()
{ {
var navService = PageModelLocator.Resolve<INavigationService>();
return navService.NaviagteToAsync<LoginPageModel>();
}
protected override async void OnStart()
{
await InitNavigation();
} }
protected override void OnSleep() protected override void OnSleep()

View File

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace Borepin.Base
{
public class PageModelBase : BindableObject
{
public virtual Task InitializeAsync(object naviagitionData = null)
{
return Task.CompletedTask;
}
protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName]string propertyName = null)
{
if(EqualityComparer<T>.Default.Equals(storage, value))
{
return false;
}
storage = value;
OnPropertyChanged(propertyName);
return true;
}
}
}

View File

@ -0,0 +1,49 @@
using Borepin.Page;
using Borepin.PageModel;
using Borepin.Service.Navigation;
using System;
using System.Collections.Generic;
using TinyIoC;
namespace Borepin.Base
{
public class PageModelLocator
{
private static TinyIoCContainer _Container;
private static Dictionary<Type, Type> _ViewLookUp;
static PageModelLocator()
{
_Container = new TinyIoCContainer();
_ViewLookUp = new Dictionary<Type, Type>();
// Register Pages and PageModels
Register<DashboardPageModel, DashboardPage>();
Register<LoginPageModel, LoginPage>();
// Register Services (Services are registered by Singeltons default)
_Container.Register<INavigationService, NavigationService>();
}
public static T Resolve<T>() where T : class
{
return _Container.Resolve<T>();
}
public static Xamarin.Forms.Page CreatePage(Type pageModelType)
{
Type pageType = _ViewLookUp[pageModelType];
Xamarin.Forms.Page page = (Xamarin.Forms.Page)Activator.CreateInstance(pageType);
object pageModel = _Container.Resolve(pageModelType);
page.BindingContext = pageModel;
return page;
}
static void Register<TPageModel, TPage>() where TPageModel : PageModelBase where TPage : Xamarin.Forms.Page
{
_ViewLookUp.Add(typeof(TPageModel), typeof(TPage));
_Container.Register<TPageModel>();
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -39,6 +39,12 @@
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Update="Page\DashboardPage.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Update="Page\LoginPage.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Update="Properties\Resources.resx"> <EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Borepin.Page.DashboardPage">
<ContentPage.Content>
<StackLayout>
<Label Text="Welcome to Xamarin.Forms!"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage.Content>
</ContentPage>

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Borepin.Page
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class DashboardPage : ContentPage
{
public DashboardPage()
{
InitializeComponent();
}
}
}

View File

@ -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"
x:Class="Borepin.Page.LoginPage"
Title="Login">
<ContentPage.Content>
<StackLayout>
<Label Text="LoginPage"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
<Button Text="Sign In" Command="{Binding SignInCommand}"/>
</StackLayout>
</ContentPage.Content>
</ContentPage>

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Borepin.Page
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class LoginPage : ContentPage
{
public LoginPage()
{
InitializeComponent();
}
}
}

View File

@ -0,0 +1,12 @@
using Borepin.Base;
using System;
using System.Collections.Generic;
using System.Text;
namespace Borepin.PageModel
{
public class DashboardPageModel : PageModelBase
{
}
}

View File

@ -0,0 +1,34 @@
using Borepin.Base;
using Borepin.Page;
using Borepin.Service.Navigation;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;
using Xamarin.Forms;
namespace Borepin.PageModel
{
public class LoginPageModel : PageModelBase
{
private ICommand _signInCommand;
private INavigationService _NaviagtionService;
public ICommand SignInCommand
{
get => _signInCommand;
set => SetProperty(ref _signInCommand, value);
}
public LoginPageModel(INavigationService navigationService)
{
_NaviagtionService = navigationService;
SignInCommand = new Command(OnSignInAction);
}
private void OnSignInAction(object obj)
{
_NaviagtionService.NaviagteToAsync<DashboardPageModel>();
}
}
}

View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace Borepin.Service.Navigation
{
public interface INavigationService
{
/// <summary>
/// Navigatoin method to push onto the Navigaiton Stack
/// </summary>
/// <typeparam name="TPageModelBase"></typeparam>
/// <param name="navigationData"></param>
/// <param name="setRoot"></param>
/// <returns></returns>
Task NaviagteToAsync<TPageModelBase>(object navigationData = null, bool setRoot = false);
/// <summary>
/// Nagivation method to pop of Navigation Stack
/// </summary>
/// <returns></returns>
Task GoBackAsync();
}
}

View File

@ -0,0 +1,43 @@
using Borepin.Base;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace Borepin.Service.Navigation
{
public class NavigationService : INavigationService
{
public Task GoBackAsync()
{
return App.Current.MainPage.Navigation.PopAsync();
}
public async Task NaviagteToAsync<TPageModelBase>(object navigationData = null, bool setRoot = false)
{
Xamarin.Forms.Page page = PageModelLocator.CreatePage(typeof(TPageModelBase));
if(setRoot)
{
App.Current.MainPage = new NavigationPage(page);
}
else
{
if(App.Current.MainPage is NavigationPage navPage)
{
await navPage.PushAsync(page);
}
else
{
App.Current.MainPage = new NavigationPage(page);
}
}
if(page.BindingContext is PageModelBase pmBase)
{
await pmBase.InitializeAsync(navigationData);
}
}
}
}