Skip to content

Instantly share code, notes, and snippets.

@syahman
Created January 8, 2020 23:48
Show Gist options
  • Save syahman/71bcc5fd09409112211c7223e3651bf7 to your computer and use it in GitHub Desktop.
Save syahman/71bcc5fd09409112211c7223e3651bf7 to your computer and use it in GitHub Desktop.
Sample Xamarin MVVM
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Xamarin.Forms;
using DAFTAR.Models;
using System.Threading.Tasks;
using Acr.UserDialogs;
using System.Diagnostics;
using DAFTAR.Services;
using DAFTAR.Constant;
namespace DAFTAR.ViewModels
{
public class BaseViewModel : INotifyPropertyChanged
{
public IUserDialogs PageDialog = UserDialogs.Instance;
public IApiManager ApiManager;
IApiService<IStudent> studentApi = new ApiService<IStudent>(AppConstant.BaseAddress);
public bool IsBusy { get; set; }
string title = string.Empty;
public string Title
{
get { return title; }
set { SetProperty(ref title, value); }
}
protected bool SetProperty<T>(ref T backingStore, T value,
[CallerMemberName]string propertyName = "",
Action onChanged = null)
{
if (EqualityComparer<T>.Default.Equals(backingStore, value))
return false;
backingStore = value;
onChanged?.Invoke();
OnPropertyChanged(propertyName);
return true;
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
var changed = PropertyChanged;
if (changed == null)
return;
changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
public BaseViewModel()
{
ApiManager = new ApiManager(studentApi);
}
public async Task RunSafe(Task task, bool ShowLoading = true, string loadinMessage = null)
{
try
{
if (IsBusy) return;
IsBusy = true;
if (ShowLoading) UserDialogs.Instance.ShowLoading(loadinMessage ?? "Loading");
await task.ConfigureAwait(false);
}
catch (Exception e)
{
IsBusy = false;
UserDialogs.Instance.HideLoading();
Debug.WriteLine(e.ToString());
await App.Current.MainPage.DisplayAlert("Eror", e.ToString(), "Ok").ConfigureAwait(false);
}
finally
{
IsBusy = false;
if (ShowLoading) UserDialogs.Instance.HideLoading();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DAFTAR.Models
{
public class DaftarPelajar
{
public string studentId { get; set; }
public string studentName { get; set; }
public string icNo { get; set; }
public string status { get; set; }
public string program { get; set; }
public DateTime intakeDate { get; set; }
public string courseCode { get; set; }
public string courseDesc { get; set; }
public string faculty { get; set; }
public string collegeDesc { get; set; }
public string hostelCode { get; set; }
public string dormCode { get; set; }
public int totalAmt { get; set; }
public int paidAmt { get; set; }
public object crnoteAmt { get; set; }
public int balAmt { get; set; }
public string qrStudentId { get; set; }
}
}
<?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:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="DAFTAR.Views.DisplayStudent"
xmlns:vm="clr-namespace:DAFTAR.ViewModels"
Title="{Binding Title}">
<ContentPage.Resources>
<ResourceDictionary>
<Color x:Key="Primary">#2196F3</Color>
<Color x:Key="Accent">#96d1ff</Color>
<Color x:Key="White">#ffffff</Color>
<Color x:Key="LightTextColor">#999999</Color>
</ResourceDictionary>
</ContentPage.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackLayout BackgroundColor="{StaticResource White}" VerticalOptions="FillAndExpand" HorizontalOptions="Fill">
<StackLayout Orientation="Horizontal" HorizontalOptions="Center" VerticalOptions="Center">
<ContentView Padding="0,20,0,20" VerticalOptions="FillAndExpand">
<Image x:Name="xfImage" Aspect="AspectFill"/>
</ContentView>
</StackLayout>
</StackLayout>
<ScrollView Grid.Row="1">
<StackLayout Orientation="Vertical" Padding="16,1,16,40" Spacing="10">
<Label FontSize="12" HorizontalTextAlignment="Center">
<Label.FormattedText>
<FormattedString>
<FormattedString.Spans>
<Span Text="{Binding dp.studentId}" FontAttributes="Bold" FontSize="20" />
</FormattedString.Spans>
</FormattedString>
</Label.FormattedText>
</Label>
<Label>
<Label.FormattedText>
<FormattedString>
<FormattedString.Spans>
<Span Text="NAMA PELAJAR" FontAttributes="Bold" />
</FormattedString.Spans>
</FormattedString>
</Label.FormattedText>
</Label>
<Label>
<Label.FormattedText>
<FormattedString>
<FormattedString.Spans>
<Span Text="{Binding dp.studentName,Mode=OneWay}" />
</FormattedString.Spans>
</FormattedString>
</Label.FormattedText>
</Label>
<Label>
<Label.FormattedText>
<FormattedString>
<FormattedString.Spans>
<Span Text="NO KAD PENGENALAN" FontAttributes="Bold" />
</FormattedString.Spans>
</FormattedString>
</Label.FormattedText>
</Label>
<Label>
<Label.FormattedText>
<FormattedString>
<FormattedString.Spans>
<Span Text="{Binding dp.icNo,Mode=OneWay}" />
</FormattedString.Spans>
</FormattedString>
</Label.FormattedText>
</Label>
<Label>
<Label.FormattedText>
<FormattedString>
<FormattedString.Spans>
<Span Text="PROGRAM" FontAttributes="Bold" />
</FormattedString.Spans>
</FormattedString>
</Label.FormattedText>
</Label>
<Label>
<Label.FormattedText>
<FormattedString>
<FormattedString.Spans>
<Span Text="{Binding dp.courseDesc}" />
</FormattedString.Spans>
</FormattedString>
</Label.FormattedText>
</Label>
<Label>
<Label.FormattedText>
<FormattedString>
<FormattedString.Spans>
<Span Text="SESI AKADEMIK" FontAttributes="Bold" />
</FormattedString.Spans>
</FormattedString>
</Label.FormattedText>
</Label>
<Label>
<Label.FormattedText>
<FormattedString>
<FormattedString.Spans>
<Span Text="{Binding dp.qrStudentId}" />
</FormattedString.Spans>
</FormattedString>
</Label.FormattedText>
</Label>
</StackLayout>
</ScrollView>
</Grid>
</ContentPage>
using Newtonsoft.Json;
using Refit;
using System;
using System.Threading.Tasks;
using System.Windows.Input;
using DAFTAR.Constant;
using DAFTAR.Models;
using DAFTAR.Services;
using Xamarin.Essentials;
using Xamarin.Forms;
using Acr.UserDialogs;
namespace DAFTAR.ViewModels
{
public class DisplayStudentViewModel : BaseViewModel
{
IUserDialogs _userDialogs = UserDialogs.Instance;
//public DaftarPelajar dp { get { return dpx; } }
public DaftarPelajar dp { get; set; }
public string studentName = string.Empty;
public ICommand GetDataCommand { get; set; }
public DisplayStudentViewModel()
{
Title = "Maklumat Pelajar";
GetDataCommand = new Command(async () => await RunSafe(CallApiStudent()).ConfigureAwait(false));
}
async Task CallApiStudent()
{
var makeUpsResponse = await ApiManager.GetStudent("000xxxxxxxx").ConfigureAwait(false);
if (makeUpsResponse.IsSuccessStatusCode)
{
var response = await makeUpsResponse.Content.ReadAsStringAsync();
dp = await Task.Run(() => JsonConvert.DeserializeObject<DaftarPelajar>(response));
//_userDialogs.Toast(dp.studentName, TimeSpan.FromSeconds(10));
//studentName = dp.studentName;
//OnPropertyChanged("DaftarPelajar");
//MakeUps = new ObservableCollection<MakeUp>(json);
}
else
{
await PageDialog.AlertAsync("Unable to get data", "Error", "Ok").ConfigureAwait(false);
}
}
/*
async Task CallApiStudent()
{
//dp = new DaftarPelajar();
var apiResponse = RestService.For<IStudent>(AppConstant.BaseAddress);
var student = await apiResponse.GetStudent().ConfigureAwait(false);
dp = JsonConvert.DeserializeObject<DaftarPelajar>(student);
}
*/
}
}
using Newtonsoft.Json;
using Refit;
using System;
using System.ComponentModel;
using System.IO;
using System.Threading.Tasks;
using DAFTAR.Constant;
using DAFTAR.Models;
using PDAFTAR.Services;
using DAFTAR.ViewModels;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace DAFTAR.Views
{
// Learn more about making custom code visible in the Xamarin.Forms previewer
// by visiting https://aka.ms/xamarinforms-previewer
[DesignTimeVisible(false)]
public partial class DisplayStudent : ContentPage
{
//string base64Image = "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";
//DaftarPelajar dp = new DaftarPelajar();
ViewModels.MainPageViewModel _viewModel = new ViewModels.MainPageViewModel();
public DisplayStudentViewModel _model = new DisplayStudentViewModel();
public DisplayStudent()
{
InitializeComponent();
BindingContext = _model;
//var vms = (DisplayStudentViewModel)this.BindingContext;
//byte[] Base64Stream = Convert.FromBase64String(vms.Dp.qrStudentId);
//xfImage.Source = ImageSource.FromStream(() => new MemoryStream(Base64Stream));
}
protected override void OnAppearing()
{
base.OnAppearing();
_model.GetDataCommand.Execute(null);
//_model.GetDataCommand.Execute(null);
//_model.GetTimeLineDataCommand.Execute(null);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment