Ecommerce App - Checout Page Part 2
For first part go to this link
For fontawesome go to this link
First create all required classes
CardModel.cs
public class CardModel : BaseViewModel
{
private Color borderColor;
private bool isSelected;
public string Name { get; set; }
public string Number { get; set; }
public string ExpDate { get; set; }
public string CardHolderName { get; set; }
public string CVV { get; set; }
public string Type { get; set; }
public string TypeIcon { get; set; }
public bool IsSelected
{
get
{
return isSelected;
}
set
{
isSelected = value;
OnPropertyChanged(nameof(IsSelected));
OnPropertyChanged(nameof(BorderColor));
}
}
public Color BorderColor
{
get
{
return (IsSelected) ? Color.FromArgb("#000000") : Color.FromArgb("#F0F8FF");
}
set
{
borderColor = value;
}
}
public Command CurrentItemChangedCommand { get; set; }
public CardModel()
{
CurrentItemChangedCommand = new Command<CardModel>(async (p) => await ExecuteCurrentItemChangedCommand(p));
}
public async Task ExecuteCurrentItemChangedCommand(CardModel cardModel)
{
try
{
cardModel.IsSelected = true;
await App.Current.MainPage.DisplayAlert("Ecommerce", cardModel.Name + " selected.", "OK");
}
catch (Exception ex)
{
await App.Current.MainPage.DisplayAlert("Ecommerce", ex.Message, "OK");
}
}
}
public class PaymentViewModel : BaseViewModel
{
public Command LoadCommand { get; set; }
//public Command CurrentItemChangedCommand { get; set; }
private List<CardModel> cardModel;
public PaymentViewModel()
{
LoadCommand = new Command(async () => await ExecuteCommand());
}
public List<CardModel> CardModel
{
get
{
return cardModel;
}
set
{
SetProperty(ref cardModel, value);
}
}
public async Task ExecuteCommand()
{
try
{
List<CardModel> list = new List<CardModel>();
list.Add(new CardModel
{
Name = "My Person Card",
TypeIcon = Solid.Cc_Visa,
Type = "My Personal Card",
CVV = "***",
CardHolderName = "Xamarin UI Designs",
ExpDate = "12 / 29",
Number = "1234 5678 8955 5455",
});
list.Add(new CardModel { Name = "Axis Card", TypeIcon = Solid.Cc_Mastercard, Type = "Axis Card", CVV = "***", CardHolderName = "Xamarin UI Designs", ExpDate = "12 / 29", Number = "1234 5678 8955 5455" });
list.Add(new CardModel { Name = "Amazon Pay", TypeIcon = Solid.Cc_Amazon_Pay, Type = "Amazon Pay", CVV = "***", CardHolderName = "Xamarin UI Designs", ExpDate = "12 / 29", Number = "1234 5678 8955 5455" });
list.Add(new CardModel { Name = "Credit Card", TypeIcon = Solid.Cc_Paypal, Type = "Paypa", CVV = "***", CardHolderName = "Xamarin UI Designs", ExpDate = "12 / 29", Number = "1234 5678 8955 5455" });
list.Add(new CardModel { Name = "NRI Card", TypeIcon = Solid.Cc_Visa, Type = "Visa", CVV = "***", CardHolderName = "Xamarin UI Designs", ExpDate = "12 / 29", Number = "1234 5678 8955 5455" });
list.Add(new CardModel { Name = "Other Card", TypeIcon = Solid.Cc_Discover, Type = "Discover", CVV = "***", CardHolderName = "Xamarin UI Designs", ExpDate = "12 / 29", Number = "1234 5678 8955 5455" });
CardModel = list;
}
catch (Exception ex)
{
await App.Current.MainPage.DisplayAlert("Ecommerce", ex.Message, "OK");
}
}
}Now we will create all required template
For CheckoutStepTemplate refer this link
For TextboxwithIcon refer this link
CardTemplate.xaml
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Ecommerce.UI.Template.Pages.CheckOut.Template.CardTemplate"
xmlns:fontawesome="clr-namespace:Ecommerce.UI.Template.Models"
xmlns:vm="clr-namespace:Ecommerce.UI.Template.Models">
<StackLayout Padding="5,20">
<Frame x:Name="frame" CornerRadius="20" Padding="0" BackgroundColor="#F0F8FF" BorderColor="{Binding BorderColor}" HasShadow="True" >
<Grid x:DataType="vm:CardModel" Padding="20" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
ColumnDefinitions="3.5*,*" RowSpacing="5" RowDefinitions="Auto,Auto,Auto,15,Auto,Auto,15,*" >
<Label Grid.Row="0" Grid.Column="0" Text="{Binding Name}" FontAttributes="Bold" FontSize="20" TextColor="{x:StaticResource Primary}"></Label>
<Label Grid.Row="0" Grid.Column="1" Text="{x:Static fontawesome:Solid.Money_Bill}"
HorizontalOptions="EndAndExpand" HorizontalTextAlignment="End"
FontFamily="{x:DynamicResource FontAwesomeFamily}" FontSize="25"
TextColor="#00308F" ></Label>
<Label Grid.Row="1" Grid.Column="0" Text="Card Number" FontAttributes="Bold" FontSize="15" TextColor="Gray"></Label>
<Label Grid.Row="2" Grid.Column="0" Text="{Binding Number}" FontAttributes="Bold" FontSize="15" TextColor="{x:StaticResource Primary}"></Label>
<Label Grid.Row="1" Grid.Column="1" Text="Exp. Date" FontAttributes="Bold" TextColor="Gray"></Label>
<Label Grid.Row="2" Grid.Column="1" Text="{Binding ExpDate}" FontAttributes="Bold" TextColor="{x:StaticResource Primary}"></Label>
<Label Grid.Row="4" Grid.Column="0" Text="CardHolderName" FontAttributes="Bold" TextColor="Gray"></Label>
<Label Grid.Row="5" Grid.Column="0" Text="{Binding CardHolderName}" FontAttributes="Bold" TextColor="{x:StaticResource Primary}"></Label>
<Label Grid.Row="4" Grid.Column="1" Text="CVV" FontAttributes="Bold" TextColor="Gray"></Label>
<Label Grid.Row="5" Grid.Column="1" Text="{Binding CVV}" FontAttributes="Bold" TextColor="{x:StaticResource Primary}"></Label>
<StackLayout Grid.Row="7" Margin="-20,0,-20,-20" Grid.Column="0" Grid.ColumnSpan="2" HorizontalOptions="FillAndExpand" BackgroundColor="White" HeightRequest="50">
<Label Text="Select this card" FontSize="15" FontAttributes="Bold" TextColor="#76AEF8" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand">
<Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding CurrentItemChangedCommand}" CommandParameter="{Binding .}"></TapGestureRecognizer>
</Label.GestureRecognizers>
</Label>
</StackLayout>
</Grid>
</Frame>
</StackLayout>
</ContentView>Payment.Xaml
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Ecommerce.UI.Template.Pages.CheckOut.Payment"
xmlns:control="clr-namespace:Ecommerce.UI.Template.CustomControls"
xmlns:template="clr-namespace:Ecommerce.UI.Template.Pages.CheckOut.Template"
xmlns:fontawesome="clr-namespace:Ecommerce.UI.Template.Models"
xmlns:mct="clr-namespace:CommunityToolkit.Maui;assembly=CommunityToolkit.Maui"
Title="Payment"
Shell.NavBarIsVisible="False">
<Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" RowDefinitions="Auto,Auto,Auto,1,Auto,Auto,Auto,Auto,Auto" Padding="20" RowSpacing="10">
<control:BackNavigation Grid.Row="0" Title="Payment" Margin="0,0,0,20"/>
<template:CheckoutStepTemplate CheckoutStep="Payment" Grid.Row="1" />
<Entry Placeholder="Coupon Code" Grid.Row="2"></Entry>
<BoxView HeightRequest="1" Color="Gray" HorizontalOptions="FillAndExpand" Grid.Row="3" Margin="0,-20,0,0"></BoxView>
<Grid BackgroundColor="#F0F8FF" ColumnSpacing="30" HeightRequest="50" Margin="-20,0"
Grid.Row="4" Padding="10" ColumnDefinitions="Auto,Auto,*">
<Label Text="Debit or Credit Card" Grid.Column="0" VerticalOptions="Center"
FontAttributes="Bold"></Label>
<Frame CornerRadius="10" Grid.Column="1" HasShadow="True" BorderColor="White"
BackgroundColor="White" Padding="5" WidthRequest="130">
<StackLayout Orientation="Horizontal" HorizontalOptions="Center">
<Label Text="{x:Static fontawesome:Solid.Plus_Circle}"
FontFamily="{x:DynamicResource FontAwesomeFamily}"
HorizontalOptions="Center" Margin="0,2,0,0"
TextColor="{x:DynamicResource Primary}"></Label>
<Label Text=" Add Card" TextColor="{x:DynamicResource Primary}"
HorizontalOptions="Center" ></Label>
</StackLayout>
</Frame>
</Grid>
<CarouselView Grid.Row="5" Grid.ColumnSpan="2" Margin="-20,0" x:Name="cvCard" ItemsSource="{Binding CardModel}" PeekAreaInsets="5"
HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<CarouselView.ItemsLayout>
<LinearItemsLayout ItemSpacing="0" Orientation="Horizontal" SnapPointsAlignment="Center" SnapPointsType="MandatorySingle"></LinearItemsLayout>
</CarouselView.ItemsLayout>
<CarouselView.ItemTemplate >
<DataTemplate>
<template:CardTemplate></template:CardTemplate>
</DataTemplate>
</CarouselView.ItemTemplate>
</CarouselView>
<Grid ColumnDefinitions="*,Auto,Auto" BackgroundColor="#F0F8FF" RowDefinitions="Auto,Auto,Auto,Auto,Auto" HorizontalOptions="FillAndExpand" Padding="10" Grid.Row="6">
<Label Text="SubTotal: " Grid.Row="0" Grid.Column="1" FontSize="16" FontAttributes="Bold"></Label>
<Label Text="100" Grid.Row="0" Grid.Column="2" HorizontalOptions="End" FontSize="16" FontAttributes="Bold"></Label>
<Label Text="Discount: " Grid.Row="1" Grid.Column="1" FontSize="16" FontAttributes="Bold"></Label>
<Label Text="30" Grid.Row="1" Grid.Column="2" HorizontalOptions="End" FontSize="16" FontAttributes="Bold"></Label>
<Label Text="Tax: " Grid.Row="2" Grid.Column="1" FontSize="16" FontAttributes="Bold"></Label>
<Label Text="20" Grid.Row="2" Grid.Column="2" HorizontalOptions="End" FontSize="16" FontAttributes="Bold"></Label>
<BoxView Color="Gray" HorizontalOptions="FillAndExpand" Grid.Row="3" Grid.Column="1" Margin="0,10" Grid.ColumnSpan="2" HeightRequest="1"></BoxView>
<Label Text="Total Amt: " FontAttributes="Bold" Grid.Row="4" Grid.Column="1" FontSize="16"></Label>
<Label Text="90" Grid.Row="4" FontAttributes="Bold" Grid.Column="2" HorizontalOptions="End" FontSize="16"></Label>
</Grid>
<Button Text="Buy" Grid.Row="7" BackgroundColor="{x:StaticResource Primary}" TextColor="White"></Button>
</Grid>
</ContentPage> Payment.xaml.cs
public partial class Payment : ContentPage
{
Models.PaymentViewModel vm;
public Payment()
{
InitializeComponent();
BindingContext = vm = new Models.PaymentViewModel();
}
protected override void OnAppearing()
{
base.OnAppearing();
vm.LoadCommand.Execute(null);
}
} Hope this is helpful to you.

Comments
Post a Comment