├── README.md ├── XamWebApiClient ├── XamWebApiClient │ ├── AssemblyInfo.cs │ ├── Services │ │ ├── IBookService.cs │ │ ├── InMemoryBookService.cs │ │ └── ApiBookService.cs │ ├── Views │ │ ├── BookDetails.xaml.cs │ │ ├── AddBook.xaml.cs │ │ ├── Books.xaml.cs │ │ ├── AddBook.xaml │ │ ├── BookDetails.xaml │ │ └── Books.xaml │ ├── AppShell.xaml.cs │ ├── Models │ │ └── Book.cs │ ├── App.xaml.cs │ ├── Startup.cs │ ├── XamWebApiClient.csproj │ ├── ViewModels │ │ ├── BaseViewModel.cs │ │ ├── AddBookViewModel.cs │ │ ├── BooksViewModel.cs │ │ └── BookDetailsViewModel.cs │ ├── GettingStarted.txt │ ├── App.xaml │ └── AppShell.xaml └── XamWebApiClient.Android │ ├── Resources │ ├── mipmap-hdpi │ │ ├── icon.png │ │ └── launcher_foreground.png │ ├── mipmap-mdpi │ │ ├── icon.png │ │ └── launcher_foreground.png │ ├── drawable │ │ ├── icon_feed.png │ │ ├── icon_about.png │ │ └── xamarin_logo.png │ ├── mipmap-xhdpi │ │ ├── icon.png │ │ └── launcher_foreground.png │ ├── mipmap-xxhdpi │ │ ├── icon.png │ │ └── launcher_foreground.png │ ├── mipmap-xxxhdpi │ │ ├── icon.png │ │ └── launcher_foreground.png │ ├── mipmap-anydpi-v26 │ │ ├── icon.xml │ │ └── icon_round.xml │ ├── values │ │ ├── colors.xml │ │ └── styles.xml │ ├── layout │ │ ├── Toolbar.xml │ │ └── Tabbar.xml │ └── AboutResources.txt │ ├── Properties │ ├── AndroidManifest.xml │ └── AssemblyInfo.cs │ ├── Assets │ └── AboutAssets.txt │ ├── MainActivity.cs │ └── XamWebApiClient.Android.csproj ├── XamWebApiClient.sln ├── .gitattributes └── .gitignore /README.md: -------------------------------------------------------------------------------- 1 | # Xamarin Forms & Web API 2 | This is a Xamarin Forms application that consumes a Web API for CRUD operations. 3 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms.Xaml; 2 | 3 | [assembly: XamlCompilation(XamlCompilationOptions.Compile)] -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-hdpi/icon.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-mdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-mdpi/icon.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/drawable/icon_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/drawable/icon_feed.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xhdpi/icon.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xxhdpi/icon.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/drawable/icon_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/drawable/icon_about.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/drawable/xamarin_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/drawable/xamarin_logo.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xxxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xxxhdpi/icon.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-hdpi/launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-hdpi/launcher_foreground.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-mdpi/launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-mdpi/launcher_foreground.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xhdpi/launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xhdpi/launcher_foreground.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xxhdpi/launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xxhdpi/launcher_foreground.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techwithpat/XamWebApiClient/HEAD/XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-anydpi-v26/icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | #3F51B5 5 | #303F9F 6 | #FF4081 7 | 8 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/mipmap-anydpi-v26/icon_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/layout/Toolbar.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient/Services/IBookService.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using XamWebApiClient.Models; 4 | 5 | namespace XamWebApiClient.Services 6 | { 7 | public interface IBookService 8 | { 9 | Task> GetBooks(); 10 | Task GetBook(int id); 11 | Task AddBook(Book book); 12 | Task SaveBook(Book book); 13 | Task DeleteBook(Book book); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient/Views/BookDetails.xaml.cs: -------------------------------------------------------------------------------- 1 | 2 | using Xamarin.Forms; 3 | using Xamarin.Forms.Xaml; 4 | using XamWebApiClient.ViewModels; 5 | 6 | namespace XamWebApiClient.Views 7 | { 8 | [XamlCompilation(XamlCompilationOptions.Compile)] 9 | public partial class BookDetails : ContentPage 10 | { 11 | public BookDetails() 12 | { 13 | InitializeComponent(); 14 | 15 | BindingContext = Startup.Resolve(); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Properties/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient/AppShell.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Xamarin.Forms; 4 | using XamWebApiClient.ViewModels; 5 | using XamWebApiClient.Views; 6 | 7 | namespace XamWebApiClient 8 | { 9 | public partial class AppShell : Xamarin.Forms.Shell 10 | { 11 | public AppShell() 12 | { 13 | InitializeComponent(); 14 | 15 | Routing.RegisterRoute(nameof(AddBook), typeof(AddBook)); 16 | Routing.RegisterRoute(nameof(BookDetails), typeof(BookDetails)); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/layout/Tabbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient/Models/Book.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Text.Json.Serialization; 5 | 6 | namespace XamWebApiClient.Models 7 | { 8 | public class Book 9 | { 10 | [JsonPropertyName("id")] 11 | public int Id { get; set; } 12 | 13 | [JsonPropertyName("title")] 14 | public string Title { get; set; } 15 | 16 | [JsonPropertyName("author")] 17 | public string Author { get; set; } 18 | 19 | [JsonPropertyName("description")] 20 | public string Description { get; set; } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient/Views/AddBook.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | using Xamarin.Forms; 8 | using Xamarin.Forms.Xaml; 9 | using XamWebApiClient.ViewModels; 10 | 11 | namespace XamWebApiClient.Views 12 | { 13 | [XamlCompilation(XamlCompilationOptions.Compile)] 14 | public partial class AddBook : ContentPage 15 | { 16 | public AddBook() 17 | { 18 | InitializeComponent(); 19 | 20 | BindingContext = Startup.Resolve(); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Xamarin.Forms; 3 | using Xamarin.Forms.Xaml; 4 | 5 | namespace XamWebApiClient 6 | { 7 | public partial class App : Application 8 | { 9 | 10 | public App() 11 | { 12 | InitializeComponent(); 13 | 14 | Startup.ConfigureServices(); 15 | 16 | MainPage = new AppShell(); 17 | } 18 | 19 | protected override void OnStart() 20 | { 21 | } 22 | 23 | protected override void OnSleep() 24 | { 25 | } 26 | 27 | protected override void OnResume() 28 | { 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient/Views/Books.xaml.cs: -------------------------------------------------------------------------------- 1 | 2 | using Xamarin.Forms; 3 | using Xamarin.Forms.Xaml; 4 | using XamWebApiClient.ViewModels; 5 | 6 | namespace XamWebApiClient.Views 7 | { 8 | [XamlCompilation(XamlCompilationOptions.Compile)] 9 | public partial class Books : ContentPage 10 | { 11 | private readonly BooksViewModel _booksViewModel; 12 | 13 | public Books() 14 | { 15 | InitializeComponent(); 16 | 17 | _booksViewModel = Startup.Resolve(); 18 | BindingContext = _booksViewModel; 19 | } 20 | 21 | protected override void OnAppearing() 22 | { 23 | _booksViewModel?.PopulateBooks(); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Assets/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories) and given a Build Action of "AndroidAsset". 3 | 4 | These files will be deployed with your package and will be accessible using Android's 5 | AssetManager, like this: 6 | 7 | public class ReadAsset : Activity 8 | { 9 | protected override void OnCreate (Bundle bundle) 10 | { 11 | base.OnCreate (bundle); 12 | 13 | InputStream input = Assets.Open ("my_asset.txt"); 14 | } 15 | } 16 | 17 | Additionally, some Android functions will automatically load asset files: 18 | 19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); 20 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient.Android/Resources/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | -------------------------------------------------------------------------------- /XamWebApiClient/XamWebApiClient/Views/AddBook.xaml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 11 | 12 | 13 | 16 | 17 | 18 | 21 | 22 |