<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Daniel Monettelli</title>
    <description>The latest articles on DEV Community by Daniel Monettelli (@danielmonettelli).</description>
    <link>https://dev.to/danielmonettelli</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F24176%2Fbd050076-15cf-47f3-b0f3-8e6380e53822.jpg</url>
      <title>DEV Community: Daniel Monettelli</title>
      <link>https://dev.to/danielmonettelli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/danielmonettelli"/>
    <language>en</language>
    <item>
      <title>Migrando Mitawi a .NET MAUI</title>
      <dc:creator>Daniel Monettelli</dc:creator>
      <pubDate>Thu, 29 Dec 2022 22:44:24 +0000</pubDate>
      <link>https://dev.to/danielmonettelli/migrando-mitawi-a-net-maui-25ij</link>
      <guid>https://dev.to/danielmonettelli/migrando-mitawi-a-net-maui-25ij</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;En esta publicación comparto mi experiencia de migrar mi aplicación Mitawi a .NET MAUI y descubrir oportunidades prometedoras para mejorar la eficiencia de mis proyectos móviles.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Mitawi es una aplicación de pronóstico del tiempo open source que ofrece pronósticos precisos y actualizados del clima diario y semanal para ubicaciones alrededor del mundo. Recientemente, fue migrada a .NET MAUI para mejorar su rendimiento y facilidad de uso. Con Mitawi, puedes planificar tus actividades al aire libre con confianza, ya que siempre tendrás acceso a la previsión del tiempo para los próximos días.&lt;/p&gt;

&lt;p&gt;Gracias a Mitawi, he podido realizar una comparación entre Xamarin.Forms y .NET MAUI en cuatro aspectos importantes: arquitecturas, rendimiento, controles útiles y proceso de migración. Mi intención es compartir mis observaciones y experiencias en estos aspectos para ayudar a otros desarrolladores que estén considerando migrar a .NET MAUI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Arquitecturas
&lt;/h2&gt;

&lt;p&gt;.NET MAUI ofrece una mayor integración con el ecosistema .NET y una arquitectura más limpia y moderna que Xamarin.Forms. Esto permite una mejor reutilización del código y una mayor facilidad para mantener y actualizar la aplicación. .NET MAUI también está basado en el marco de aplicaciones móviles de Microsoft, lo que significa que puedes aprovechar todas las herramientas y recursos disponibles en el ecosistema .NET.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SgvOaJop--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m223q66jupjtyxkq2xw8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SgvOaJop--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m223q66jupjtyxkq2xw8.jpg" alt="Arquitecturas" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Rendimiento
&lt;/h2&gt;

&lt;p&gt;Después de comparar el rendimiento de .NET MAUI y Xamarin.Forms en la aplicación Mitawi, he de admitir que no he observado una diferencia significativa en velocidad y uso de recursos. Sin embargo, es importante mencionar que .NET MAUI utiliza el marco de aplicaciones móviles de Microsoft, el cual está optimizado para brindar eficiencia y desempeño. Además, permite el uso de compilación AOT (Ahead-of-Time) para mejorar el rendimiento en tiempo de ejecución. Estas características son valiosas y espero poder aprovecharlas en el futuro, especialmente cuando se actualice a .NET 7.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Es importante tener en cuenta que el rendimiento puede variar dependiendo del caso de uso y de la implementación de la aplicación, por lo que es recomendable hacer pruebas y mediciones para evaluar el rendimiento en cada caso específico.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br&gt;
  &lt;/p&gt;




&lt;h2&gt;
  
  
  Controles útiles
&lt;/h2&gt;

&lt;p&gt;.NET MAUI ofrece algunos controles útiles que no están disponibles en Xamarin.Forms y que pueden simplificar el desarrollo de la interfaz de usuario de la aplicación. Por ejemplo, .NET MAUI cuenta con un control Border que permite crear bordes personalizados con facilidad. Este control ofrece características como sombras y gradientes que pueden ser útiles para el desarrollo de la interfaz de usuario de la aplicación y pueden ahorrar tiempo y esfuerzo al no tener que utilizar otras bibliotecas para lograr el mismo resultado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--#region Top layer lower 1--&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Border&lt;/span&gt;
    &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"topLayerLower1"&lt;/span&gt;
    &lt;span class="na"&gt;sk:Skeleton.Hide=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
    &lt;span class="na"&gt;sk:Skeleton.IsBusy=&lt;/span&gt;&lt;span class="s"&gt;"{Binding IsBusy}"&lt;/span&gt;
    &lt;span class="na"&gt;BackgroundColor=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource col_thirt}"&lt;/span&gt;
    &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource vsm_orientation_topLayerLower1}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Border.Shadow&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Shadow&lt;/span&gt;
            &lt;span class="na"&gt;Brush=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource col_thirt}"&lt;/span&gt;
            &lt;span class="na"&gt;Opacity=&lt;/span&gt;&lt;span class="s"&gt;"0.93"&lt;/span&gt;
            &lt;span class="na"&gt;Radius=&lt;/span&gt;&lt;span class="s"&gt;"45"&lt;/span&gt;
            &lt;span class="na"&gt;Offset=&lt;/span&gt;&lt;span class="s"&gt;"20,20"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Border.Shadow&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Border.StrokeShape&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;RoundRectangle&lt;/span&gt; &lt;span class="na"&gt;CornerRadius=&lt;/span&gt;&lt;span class="s"&gt;"0,0,43,43"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Border.StrokeShape&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Border&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!--#endregion--&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Proceso de migración
&lt;/h2&gt;

&lt;p&gt;Durante la migración de Mitawi a .NET MAUI, tomé medidas para asegurarme de tener todas las herramientas y dependencias necesarias para trabajar con esta tecnología. Aunque fue algo relativo, pude lograr adaptar la aplicación para aprovechar las características únicas de .NET MAUI, como el control Border. Además, realicé pruebas exhaustivas para minimizar cualquier posible error tras la migración. En resumen, el proceso fue desafiante pero logré completarlo con éxito.&lt;/p&gt;




&lt;h2&gt;
  
  
  Repositorio
&lt;/h2&gt;

&lt;p&gt;El proyecto es de código abierto y puedes verlo haciendo clic en la siguiente imagen. ¡No dudes en echarle un vistazo!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/danielmonettelli/netmaui-mitawi-app-challenge"&gt;&lt;br&gt;
  &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8B1cSJox--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/danielmonettelli/danielmonettelli.github.io/main/assets/img/images/7_x_github_repository.jpg" width="800" height="309"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Bibliografía
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://askxammy.com/talk-net-conf-2022-recap/"&gt;[Talk] .NET Conf 2022 Recap - Speaker Leomaris Reyes&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://learn.microsoft.com/en-us/dotnet/maui/user-interface/controls/border?view=net-maui-7.0"&gt;Border - Official .NET MAUI documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://learn.microsoft.com/en-us/dotnet/communitytoolkit/maui/"&gt;.NET Multi-platform App UI (.NET MAUI) Community Toolkit documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=EXmSmv5ifkk"&gt;Migrating &amp;amp; Upgrading Xamarin.Forms to .NET MAUI - Tutorial video made by James Montemagno&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=OP9g5dM0bgk"&gt;.NET Community Toolkit 8.0 - MVVM Goodness for .NET MAUI | .NET Conf: Focus on MAUI - Tutorial video made by Sergio Pedri&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusiones
&lt;/h2&gt;

&lt;p&gt;Al migrar Mitawi de Xamarin.Forms a .NET MAUI he podido apreciar algunas de las ventajas de este nuevo marco multiplataforma en cuatro áreas clave: arquitecturas, rendimiento, controles útiles y proceso de migración.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En cuanto a las arquitecturas, .NET MAUI ofrece una mayor integración con el ecosistema .NET y una arquitectura más sencilla y flexible.&lt;/li&gt;
&lt;li&gt;Aunque todavía no he notado una mejora significativa en el rendimiento de Mitawi con .NET MAUI en comparación con Xamarin.Forms, estoy optimista de que al actualizar a .NET 7 pueda ver una mejora mayor. .NET MAUI tiene características prometedoras y estoy dispuesto a trabajar duro para aprovechar al máximo éstas herramientas y mejorar el rendimiento de Mitawi en el futuro.&lt;/li&gt;
&lt;li&gt;.NET MAUI tiene controles útiles como el control Border que pueden simplificar el desarrollo de la interfaz de usuario y ahorrar tiempo y esfuerzo.&lt;/li&gt;
&lt;li&gt;Después de completar la migración de Mitawi a .NET MAUI, me he encontrado con algunos obstáculos de adaptabilidad en la segunda interfaz de la aplicación. Espero poder solucionarlos pronto y seguir disfrutando de las ventajas de .NET MAUI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por favor, no dudes en brindarme tu retroalimentación y, con la ayuda de mi repositorio, sacar tus propias conclusiones. Si tienes alguna pregunta o sugerencia constructiva, me gustaría mucho leerla. Muchas gracias por tu tiempo.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>dotnetmaui</category>
      <category>xamarinforms</category>
      <category>xaml</category>
    </item>
    <item>
      <title>Xamarin.Forms UI/UX Challenges - Micuna Food - Part3</title>
      <dc:creator>Daniel Monettelli</dc:creator>
      <pubDate>Sun, 20 Feb 2022 04:56:00 +0000</pubDate>
      <link>https://dev.to/danielmonettelli/xamarinforms-uiux-challenges-micuna-food-part3-hm8</link>
      <guid>https://dev.to/danielmonettelli/xamarinforms-uiux-challenges-micuna-food-part3-hm8</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;In this third part of the Challenge I will go beyond design, I will add functionality to the share icon making use of two of the most popular Xamarin.Forms libraries, which are Xamarin Community Toolkit and Xamarin.Essentials.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This publication is part of the &lt;a href="https://www.luisbeltran.mx/2020/11/16/segundo-calendario-de-adviento-de-xamarin-en-espanol/"&gt;Second Xamarin Advent Calendar in Spanish&lt;/a&gt; organized by &lt;a href="https://twitter.com/darkicebeam"&gt;Dr. Luis Beltrán&lt;/a&gt;, and of the third &lt;a href="https://aspnetcoremaster.com/calendario-adviento-csharp-2020.html"&gt;C# Advent Calendar in Spanish&lt;/a&gt; organized by &lt;a href="https://twitter.com/jbenjamincc"&gt;Ing. Benjamín Camacho&lt;/a&gt;, thank you very much for being part of these great initiatives.&lt;/p&gt;




&lt;h2&gt;
  
  
  Screenshot and Toast Multiplatform
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VOlritsb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_3_screenshot_and_toast_multiplatform.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VOlritsb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_3_screenshot_and_toast_multiplatform.png" alt="" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Previously, the FoodDetailPage had the share button, that’s what the designer did, but if we think as users, the first thing that comes to mind would be ¿What am I going to share?, in the wake of that dilemma, &lt;strong&gt;it will start with a screenshot button to remove false perceptions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Digging deeper into the code, in the Icons.xaml file located in the Styles folder, we will customize the screenshot icon with its respective properties, including its size and color.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--#region FontImageSource INTERFACES--&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;FontImageSource&lt;/span&gt;
    &lt;span class="na"&gt;x:Key=&lt;/span&gt;&lt;span class="s"&gt;"icon_screenshot_solid"&lt;/span&gt;
    &lt;span class="na"&gt;FontFamily=&lt;/span&gt;&lt;span class="s"&gt;"MonettelliFontIcons"&lt;/span&gt;
    &lt;span class="na"&gt;Glyph=&lt;/span&gt;&lt;span class="s"&gt;"{x:Static FontAwesome:MonettelliFontIcons.icon_screenshot_solid}"&lt;/span&gt;
    &lt;span class="na"&gt;Size=&lt;/span&gt;&lt;span class="s"&gt;"26"&lt;/span&gt;
    &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"{DynamicResource colPrim}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!--#endregion--&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;To change one icon to another in the same button, I use Visual State Manager&lt;/strong&gt;, these icons are linked in the Source property of the TargetType “Image”, it is worth mentioning, that it is necessary to add an x:Key to use it in a control or layout similar to the TargetType.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--#region Visual States Manager--&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Style&lt;/span&gt;
    &lt;span class="na"&gt;x:Key=&lt;/span&gt;&lt;span class="s"&gt;"vsm_fontIconChanged"&lt;/span&gt;
    &lt;span class="na"&gt;TargetType=&lt;/span&gt;&lt;span class="s"&gt;"Image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Setter&lt;/span&gt; &lt;span class="na"&gt;Property=&lt;/span&gt;&lt;span class="s"&gt;"VisualStateManager.VisualStateGroups"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisualStateGroupList&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;VisualStateGroup&lt;/span&gt; &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"CommonStates"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

                &lt;span class="nt"&gt;&amp;lt;VisualState&lt;/span&gt; &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"Normal"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;VisualState.Setters&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Setter&lt;/span&gt; &lt;span class="na"&gt;Property=&lt;/span&gt;&lt;span class="s"&gt;"Source"&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_screenshot_solid}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;/VisualState.Setters&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/VisualState&amp;gt;&lt;/span&gt;

                &lt;span class="nt"&gt;&amp;lt;VisualState&lt;/span&gt; &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"Selected"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;VisualState.Setters&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Setter&lt;/span&gt; &lt;span class="na"&gt;Property=&lt;/span&gt;&lt;span class="s"&gt;"Source"&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_share_solid}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;/VisualState.Setters&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/VisualState&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;/VisualStateGroup&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/VisualStateGroupList&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Setter&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Style&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!--#endregion--&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In FoodDetailPage.xaml, &lt;strong&gt;I implement a non-visible CachedImage control, responsible for storing the image capture&lt;/strong&gt;, and with x:Name “imageForScreenshot”, we will work on the code behind said xaml file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--  Image for Screenshot  --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;ffimageloading:CachedImage&lt;/span&gt;
    &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"imageForScreenshot"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
    &lt;span class="na"&gt;IsVisible=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  In Mode Xamarin.Essentials.Screenshot
&lt;/h3&gt;

&lt;p&gt;Using GestureRecognizers, I create an event called ScreenshotAndShareFile_Tapped, and through the if statement, I indicate, that if the Source property of imageForScreenshot is null, execute the following process:&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;screenshot variable&lt;/strong&gt; is responsible for capturing the screen based on the dimensions of the physical device or emulator (Height and Width).&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;stream variable&lt;/strong&gt; will obtain the data flow of the screenshot through the OpenReadAsync() method.&lt;/p&gt;

&lt;p&gt;Finally, the &lt;strong&gt;FromStream() method&lt;/strong&gt; is the linchpin for create an image from the specified stream variable, all of this is stored in the Source property of imageForScreenshot.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ScreenshotAndShareFile_Tapped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EventArgs&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;imageForScreenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Mode Xamarin.Essentials.Screenshot&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;screenshot&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Screenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CaptureAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;OpenReadAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;imageForScreenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ImageSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromStream&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Visual State Manager here...&lt;/span&gt;

        &lt;span class="c1"&gt;// Toast Multiplatform here...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// File Share here...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  In Mode ImageFromXamarinUI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;This library is so versatile&lt;/strong&gt;, because we can &lt;strong&gt;create specific screenshots at the interface level&lt;/strong&gt;, and it can be applied to different use cases. Very grateful to Dima Dimov for creating this amazing nuget package.&lt;/p&gt;

&lt;p&gt;The following code fragment we can see that the x:Name called &lt;strong&gt;layoutMainParent is the parent GridLayout&lt;/strong&gt;, therefore, &lt;strong&gt;my screenshot will be everything that encapsulates said layout&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ContentPage.Content&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;ScrollView&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;Grid&lt;/span&gt; &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"layoutMainParent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="c"&gt;&amp;lt;!--  Rest of the code here...  --&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;/ScrollView&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/ContentPage.Content&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Continuing in the ScreenshotAndShareFile_Tapped event, the &lt;strong&gt;stream variable&lt;/strong&gt; is in charge of &lt;strong&gt;adding the data flow&lt;/strong&gt;, &lt;strong&gt;but now it will depend on the dimensions of the layoutMainParent&lt;/strong&gt;, the parameter of the CaptureImageAsync() method assumes the background color, finally, the image is created with the same logic than Xamarin.Essentials.Screenshot.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ScreenshotAndShareFile_Tapped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EventArgs&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;imageForScreenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Mode ImageFromXamarinUI&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;layoutMainParent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CaptureImageAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Color&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;White&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;imageForScreenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ImageSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromStream&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Visual State Manager here...&lt;/span&gt;

        &lt;span class="c1"&gt;// Toast Multiplatform here...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// File Share here...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When the button is touched, it changes to the “Selected” state (share icon)&lt;/strong&gt;, this process is done by the GoToState() method of VisualStateManager.&lt;/p&gt;

&lt;p&gt;Now I enter the Xamarin Community Toolkit grounds, and I am excited that they add &lt;strong&gt;Toast Multiplatform&lt;/strong&gt;, with a few lines of code we can indicate the message and the duration of the notification, all thanks to the DisplayToastAsync() method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;StackLayout&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"6"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;xct:TouchEffect.NativeAnimation=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
    &lt;span class="na"&gt;xct:TouchEffect.AnimationDuration=&lt;/span&gt;&lt;span class="s"&gt;"300"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;StackLayout.GestureRecognizers&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;TapGestureRecognizer&lt;/span&gt; &lt;span class="na"&gt;Tapped=&lt;/span&gt;&lt;span class="s"&gt;"ScreenshotAndShareFile_Tapped"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/StackLayout.GestureRecognizers&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt;
        &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"stateFontIcon"&lt;/span&gt;
        &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource vsm_fontIconChanged}"&lt;/span&gt;
        &lt;span class="na"&gt;HorizontalOptions=&lt;/span&gt;&lt;span class="s"&gt;"Center"&lt;/span&gt;
        &lt;span class="na"&gt;VerticalOptions=&lt;/span&gt;&lt;span class="s"&gt;"CenterAndExpand"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/StackLayout&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ScreenshotAndShareFile_Tapped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EventArgs&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;imageForScreenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Mode ImageFromXamarinUI here...&lt;/span&gt;

        &lt;span class="c1"&gt;// Mode Xamarin.Essentials.Screenshot here...&lt;/span&gt;

        &lt;span class="n"&gt;VisualStateManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GoToState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stateFontIcon&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Selected"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;DisplayToastAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Successful screenshot"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;durationMilliseconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// File Share here...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Share File
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7h_wdBcQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_3_share_file.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7h_wdBcQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_3_share_file.png" alt="" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Xamarin.Essentials has another great API called &lt;strong&gt;Share&lt;/strong&gt;, which allows you to send different types of files to the installed applications of the physical device or emulator.&lt;/p&gt;

&lt;p&gt;Now that we have our image capture and the share button, we proceed with the file submission flow:&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;fileName&lt;/strong&gt; is in charge of naming the image.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;fullPath&lt;/strong&gt; combines fileName with the CacheDirectory property, that gets the location where temporary data can be stored, and also helps to send the file faster.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;byteArray variable&lt;/strong&gt; stores the weight of the image in bytes, it should be noted, that CachedImage has two methods to obtain png and jpg images (in this case I use the GetImageAsPngAsync() method), thank you very much Daniel Luberda for creating this fantastic library.&lt;/p&gt;

&lt;p&gt;To encapsulate byteArray in fullPath it is done with the &lt;strong&gt;WriteAllBytes() method&lt;/strong&gt;, with this, we already have a fully packed file.&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;RequestAsync() method&lt;/strong&gt; I generate a new instance of ShareFileRequest(), there we add the title and corresponding file, it should be noted that “image/png” is only to highlight that it is a png file, it is not necessary to add it.&lt;/p&gt;

&lt;p&gt;And WHOLAA!!!, we can now send our image, all thanks to Xamarin.Essentials.Share.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ScreenshotAndShareFile_Tapped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EventArgs&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;imageForScreenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Mode ImageFromXamarinUI here...&lt;/span&gt;

        &lt;span class="c1"&gt;// Mode Xamarin.Essentials.Screenshot here...&lt;/span&gt;

        &lt;span class="c1"&gt;// Visual State Manager here...&lt;/span&gt;

        &lt;span class="c1"&gt;// Toast Multiplatform here...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"MicunaFood - "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;foodDetailViewModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SelectedFood&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name_Food&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;".png"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;fullPath&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FileSystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CacheDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;byteArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;imageForScreenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetImageAsPngAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteAllBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fullPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;byteArray&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Share&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RequestAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ShareFileRequest&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Data Transfer "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;foodDetailViewModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SelectedFood&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name_Food&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ShareFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fullPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Send and Save File
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Eznl-hqk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_3_send_and_save_file.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Eznl-hqk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_3_send_and_save_file.png" alt="" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the image above, you can see that the Android device sends the file through Microsoft Outlook application, while on the iPhone, it saves the screenshot, both ways are feasible.&lt;/p&gt;

&lt;p&gt;The idea is for the user to share and save the different foods that MicunaFood offers for future purchases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Other Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Repository class
&lt;/h3&gt;

&lt;p&gt;To improve the management of the MicunaFood data to the different ViewModels, they were migrated to the static class called repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Tip in FFImageLoading
&lt;/h3&gt;

&lt;p&gt;The video by Daniel Luberda shows the importance of adding the &lt;strong&gt;CacheType property&lt;/strong&gt; to improve images performance.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Dca3ksv8esU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;






&lt;h2&gt;
  
  
  Get the Code
&lt;/h2&gt;

&lt;p&gt;All the code is open source, you can see it on &lt;a href="https://github.com/danielmonettelli/XF_MicunaFood/tree/XF_MicunaFood_Part3"&gt;my github&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://monettelliuikit.github.io/"&gt;MonettelliUIKIT&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://material.io/"&gt;Material Design&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/xamarin/community-toolkit/"&gt;Xamarin Community Toolkit&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/dimonovdd/ImageFromXamarinUI"&gt;ImageFromXamarinUI - Dima Dimov&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=O9D3NSYh1t0"&gt;Take Partial Screenshots of Your Xamarin.Forms App - Gerald Versluis Youtube Channel&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/xamarin/essentials/screenshot?context=xamarin/xamarin-forms"&gt;Xamarin.Essentials: Screenshot&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/xamarin/essentials/share?context=xamarin%2Fxamarin-forms&amp;amp;tabs=android"&gt;Xamarin.Essentials: Share&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/visual-state-manager"&gt;Xamarin.Forms Visual State Manager&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dribbble.com/"&gt;Dribbble&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pexels.com/es-es/"&gt;Pexels&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I love &lt;strong&gt;Xamarin.Essentials.Screenshot and ImageFromXamarinUI&lt;/strong&gt;, different features, same goal.&lt;/li&gt;
&lt;li&gt;In a single line of code you can add &lt;strong&gt;Toast Multiplatform&lt;/strong&gt;, my respects to Xamarin.Community.Toolkit.&lt;/li&gt;
&lt;li&gt;This post demonstrates that &lt;strong&gt;Xamarin.Essentials.Share&lt;/strong&gt; doesn’t just send text (like the example in the documentation), but any type of file.&lt;/li&gt;
&lt;li&gt;State changes can also be done in a single control, and &lt;strong&gt;Visual State Manager&lt;/strong&gt; helps me achieve it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember that you can give feedback and with the help of my repository draw your own conclusions, if you have any questions or constructive criticism write to me below this publication, thank you very much.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>xamarin</category>
      <category>xamarinforms</category>
      <category>ux</category>
    </item>
    <item>
      <title>Xamarin.Forms UI/UX Challenges - Micuna Food - Part2</title>
      <dc:creator>Daniel Monettelli</dc:creator>
      <pubDate>Sun, 20 Feb 2022 04:36:00 +0000</pubDate>
      <link>https://dev.to/danielmonettelli/xamarinforms-uiux-challenges-micuna-food-part2-2oj8</link>
      <guid>https://dev.to/danielmonettelli/xamarinforms-uiux-challenges-micuna-food-part2-2oj8</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;In this second part of the Challenge, the protagonist is the nuget package "Xamarin Community Toolkit", an all-in-one that provides abstractions that we commonly use.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This publication is part of the &lt;a href="https://www.luisbeltran.mx/2020/11/16/segundo-calendario-de-adviento-de-xamarin-en-espanol/"&gt;Second Xamarin Advent Calendar in Spanish&lt;/a&gt; organized by &lt;a href="https://twitter.com/darkicebeam"&gt;Dr. Luis Beltrán&lt;/a&gt;, and of the third &lt;a href="https://aspnetcoremaster.com/calendario-adviento-csharp-2020.html"&gt;C# Advent Calendar in Spanish&lt;/a&gt; organized by &lt;a href="https://twitter.com/jbenjamincc"&gt;Ing. Benjamín Camacho&lt;/a&gt;, thank you very much for being part of these great initiatives.&lt;/p&gt;




&lt;h2&gt;
  
  
  Inspirational Design
&lt;/h2&gt;

&lt;p&gt;Continuing with the design of &lt;a href="https://dribbble.com/ghulaam-rasool"&gt;Ghulam Rasool&lt;/a&gt;, the following detail interface has two upper icons, one to go back and one to share, followed by the delicious image of the food, with its respective title and description, finally, the price of the food is accompanied by a button, which allows adding to the shopping cart, &lt;strong&gt;simple and clean at the same time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---t26Vwd5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_design.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---t26Vwd5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_design.png" alt="" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Navigating from HomePage to FoodDetailPage
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aM7624Ov--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_navigating_from_homepage_to_fooddetailpage.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aM7624Ov--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_navigating_from_homepage_to_fooddetailpage.png" alt="" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The navigation flow from page to page applies UX, when the user clicks on an item he has to observe what he did exactly, for this, a waiting time is necessary and then continue with the next page.&lt;/p&gt;

&lt;p&gt;The following example*&lt;strong&gt;(Code-Behind of HomePage)&lt;/strong&gt;* shows the &lt;strong&gt;CollectionView_SelectedItem&lt;/strong&gt; event created from the &lt;strong&gt;SelectionChanged&lt;/strong&gt; property of &lt;strong&gt;CollectionView&lt;/strong&gt;, the &lt;strong&gt;selectedItem&lt;/strong&gt; variable is made up of the event parameter, whose &lt;strong&gt;CurrentSelection&lt;/strong&gt; property is responsible for finding the selected items, then an expression is added conditional*&lt;strong&gt;(if)&lt;/strong&gt;* arguing that if there is a selection of an item, proceed with a &lt;strong&gt;Delay( ) of 350ms&lt;/strong&gt;, and then go to the &lt;strong&gt;FoodDetailPage&lt;/strong&gt; page, the item details are seen through the conversion &lt;strong&gt;"selectedItem as FoodsViewModel"&lt;/strong&gt;, finally, said selection is canceled.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HomePage&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ContentPage&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;CollectionView_SelectedItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SelectionChangedEventArgs&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;selectedItem&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentSelection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FirstOrDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;selectedItem&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;350&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Navigation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PushAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FoodDetailPage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;selectedItem&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;FoodsViewModel&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;collectionView_MicunaFood&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SelectedItem&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;Code-Behind of FoodDetailPage&lt;/strong&gt; has a similar logic to the previous one, the &lt;strong&gt;ReturnPreviousPage_Tapped"&lt;/strong&gt; event created from &lt;strong&gt;GestureRecognizers&lt;/strong&gt;, is responsible for returning to the &lt;strong&gt;HomePage&lt;/strong&gt;, this &lt;strong&gt;triggers a 300ms animation&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;(for the icon, see in the XAML)&lt;/em&gt;&lt;/strong&gt;, then complete the &lt;strong&gt;50ms wait&lt;/strong&gt; to return to the initial page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FoodDetailPage&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ContentPage&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ReturnPreviousPage_Tapped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EventArgs&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;350&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Navigation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PopAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;FoodDetailViewModel&lt;/strong&gt; is in charge of structuring the details of &lt;strong&gt;FoodDetailPage&lt;/strong&gt;, we can see that &lt;strong&gt;HomeViewModel( )&lt;/strong&gt; is initialized in the constructor, because the list is there, the &lt;strong&gt;selectedItem&lt;/strong&gt; variable filters the Foods list, and through LINQ the &lt;strong&gt;selectedFoodsViewModel&lt;/strong&gt; is paired with the model property, finally, the &lt;strong&gt;FoodsViewModel( )&lt;/strong&gt; is initialized by adding the result of the &lt;strong&gt;selectedItem&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FoodDetailViewModel&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BaseViewModel&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;HomeViewModel&lt;/span&gt; &lt;span class="n"&gt;homeViewModel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;FoodsViewModel&lt;/span&gt; &lt;span class="n"&gt;SelectedFood&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;FoodDetailViewModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FoodsViewModel&lt;/span&gt; &lt;span class="n"&gt;selectedFoodsViewModel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;homeViewModel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;HomeViewModel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;selectedItem&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;homeViewModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Foods&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name_Food&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;selectedFoodsViewModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name_Food&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;FirstOrDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;SelectedFood&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FoodsViewModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;selectedItem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Proportions in the Interface
&lt;/h2&gt;

&lt;p&gt;Going deeper into the issue of proportions, it is important to &lt;strong&gt;divide the elements of an interface into colored regions&lt;/strong&gt;, both for the rows and for the columns, to later obtain a global view of both, this helps to locate the elements in the XAML.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7iDn62Sf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_proportions_on_base_fooddetailpage.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7iDn62Sf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_proportions_on_base_fooddetailpage.png" alt="" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Proportions in FoodDetailPage.xaml&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ScrollView&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Grid&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Grid.RowDefinitions&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"13"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"48"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"13"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  3  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- Mix Structure  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/RowDefinition&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  4  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"32"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  5  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  6  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"16"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  7  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  8  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- Mix Structure  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/RowDefinition&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  9  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"16"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  10  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  11  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  12  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  13  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  14  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"25"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Grid.RowDefinitions&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.01*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.04*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"32"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  3  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.23*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  4  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.126*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  5  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"161"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  6  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"32"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  7  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.04*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  8  --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.01*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;

        &lt;span class="c"&gt;&amp;lt;!--  Top Icons  --&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--  Image  --&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--  Title and Description  --&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--  Description and Price Value  --&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--  Add to Cart Button  --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ScrollView&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Top Icons
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C0ZtrbOq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_part1_top_icons.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C0ZtrbOq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_part1_top_icons.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Complying with the &lt;a href="https://material.io/develop/web/supporting/touch-target"&gt;Material Design&lt;/a&gt; parameters, &lt;strong&gt;the icons were standardized with a Touch Target Area of ​​48*48px&lt;/strong&gt;, all thanks to &lt;a href="https://andrei-misiukevich.medium.com/touch-effect-xamarin-forms-xamarin-community-toolkit-91fb6691f99e"&gt;TouchEffect&lt;/a&gt;, a super useful and important effect from Xamarin Community Toolkit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--  Top Icons  --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;StackLayout&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;xct:TouchEffect.NativeAnimation=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
    &lt;span class="na"&gt;xct:TouchEffect.AnimationDuration=&lt;/span&gt;&lt;span class="s"&gt;"300"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;StackLayout.GestureRecognizers&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;TapGestureRecognizer&lt;/span&gt; &lt;span class="na"&gt;Tapped=&lt;/span&gt;&lt;span class="s"&gt;"ReturnPreviousPage_Tapped"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/StackLayout.GestureRecognizers&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt;
        &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_left_arrow_line}"&lt;/span&gt;
        &lt;span class="na"&gt;HorizontalOptions=&lt;/span&gt;&lt;span class="s"&gt;"Center"&lt;/span&gt;
        &lt;span class="na"&gt;VerticalOptions=&lt;/span&gt;&lt;span class="s"&gt;"CenterAndExpand"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/StackLayout&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;StackLayout&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"6"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;xct:TouchEffect.NativeAnimation=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
    &lt;span class="na"&gt;xct:TouchEffect.AnimationDuration=&lt;/span&gt;&lt;span class="s"&gt;"300"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt;
        &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_share_solid}"&lt;/span&gt;
        &lt;span class="na"&gt;HorizontalOptions=&lt;/span&gt;&lt;span class="s"&gt;"Center"&lt;/span&gt;
        &lt;span class="na"&gt;VerticalOptions=&lt;/span&gt;&lt;span class="s"&gt;"CenterAndExpand"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/StackLayout&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Proportional Image
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c24qeZGR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_part2_proportional_image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c24qeZGR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_part2_proportional_image.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As for images, &lt;a href="https://askxammy.com/optimizing-handling-images-with-ffimageloading/"&gt;FFImageLoading&lt;/a&gt; is my ally to optimize them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--  Image  --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;ffimageloading:CachedImage&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
    &lt;span class="na"&gt;CacheDuration=&lt;/span&gt;&lt;span class="s"&gt;"30"&lt;/span&gt;
    &lt;span class="na"&gt;DownsampleToViewSize=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
    &lt;span class="na"&gt;FadeAnimationForCachedImages=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
    &lt;span class="na"&gt;FadeAnimationEnabled=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
    &lt;span class="na"&gt;FadeAnimationDuration=&lt;/span&gt;&lt;span class="s"&gt;"100"&lt;/span&gt;
    &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"{Binding SelectedFood.Image_Food}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Title and Description
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a4mABanH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_part3_title_and_description.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a4mABanH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_part3_title_and_description.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Title and Description &lt;strong&gt;located proportionally&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--  Title and Description  --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
    &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding SelectedFood.Name_Food}"&lt;/span&gt;
    &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtHeadLine5_1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"7"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
    &lt;span class="na"&gt;MaxLines=&lt;/span&gt;&lt;span class="s"&gt;"100"&lt;/span&gt;
    &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding SelectedFood.Long_Description_Food}"&lt;/span&gt;
    &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtBody1_1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Description and Price Value
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U-Jt-z3w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_part4_description_and_price_value.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U-Jt-z3w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_part4_description_and_price_value.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Description and Price Value &lt;strong&gt;located proportionally&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--  Description and Price Value  --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Total Price:"&lt;/span&gt;
    &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtBody1_1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"12"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding SelectedFood.Price_Food, StringFormat='{0:C2}'}"&lt;/span&gt;
    &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtBody1_2}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Add to Cart Button
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wo9HL1r2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_part5_add_to_cart_button.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wo9HL1r2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_part5_add_to_cart_button.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Button&lt;/strong&gt; is made with &lt;strong&gt;PancakeView&lt;/strong&gt;, that custom shape was obtained with the &lt;strong&gt;"CornerRadius"&lt;/strong&gt; property in 4 parameters, and with &lt;a href="https://andrei-misiukevich.medium.com/touch-effect-xamarin-forms-xamarin-community-toolkit-91fb6691f99e"&gt;TouchEffect&lt;/a&gt; the essence that every Button should have was reinforced, the &lt;strong&gt;"add icon"&lt;/strong&gt; was also encapsulated with &lt;strong&gt;PancakeView&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--  Add to Cart Button  --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;yummy:PancakeView&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"9"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.RowSpan=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Padding=&lt;/span&gt;&lt;span class="s"&gt;"13,0"&lt;/span&gt;
    &lt;span class="na"&gt;xct:TouchEffect.NativeAnimation=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
    &lt;span class="na"&gt;xct:TouchEffect.AnimationDuration=&lt;/span&gt;&lt;span class="s"&gt;"300"&lt;/span&gt;
    &lt;span class="na"&gt;BackgroundColor=&lt;/span&gt;&lt;span class="s"&gt;"{DynamicResource colPrim}"&lt;/span&gt;
    &lt;span class="na"&gt;CornerRadius=&lt;/span&gt;&lt;span class="s"&gt;"38,38,0,38"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;StackLayout&lt;/span&gt;
        &lt;span class="na"&gt;Orientation=&lt;/span&gt;&lt;span class="s"&gt;"Horizontal"&lt;/span&gt;
        &lt;span class="na"&gt;VerticalOptions=&lt;/span&gt;&lt;span class="s"&gt;"CenterAndExpand"&lt;/span&gt;
        &lt;span class="na"&gt;Spacing=&lt;/span&gt;&lt;span class="s"&gt;"7"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
            &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Add to Cart"&lt;/span&gt;
            &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSubtitle1_3}"&lt;/span&gt;
            &lt;span class="na"&gt;HorizontalOptions=&lt;/span&gt;&lt;span class="s"&gt;"EndAndExpand"&lt;/span&gt;
            &lt;span class="na"&gt;VerticalOptions=&lt;/span&gt;&lt;span class="s"&gt;"Center"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;yummy:PancakeView&lt;/span&gt;
            &lt;span class="na"&gt;BackgroundColor=&lt;/span&gt;&lt;span class="s"&gt;"{DynamicResource colQui}"&lt;/span&gt;
            &lt;span class="na"&gt;HorizontalOptions=&lt;/span&gt;&lt;span class="s"&gt;"End"&lt;/span&gt;
            &lt;span class="na"&gt;HeightRequest=&lt;/span&gt;&lt;span class="s"&gt;"48"&lt;/span&gt;
            &lt;span class="na"&gt;WidthRequest=&lt;/span&gt;&lt;span class="s"&gt;"48"&lt;/span&gt;
            &lt;span class="na"&gt;CornerRadius=&lt;/span&gt;&lt;span class="s"&gt;"24"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt;
                &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_add_line}"&lt;/span&gt;
                &lt;span class="na"&gt;VerticalOptions=&lt;/span&gt;&lt;span class="s"&gt;"CenterAndExpand"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/yummy:PancakeView&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/StackLayout&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/yummy:PancakeView&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Good UX Practices in Harmonic Interfaces
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Mix Structure
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vhcH8wFI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_good_ux_practices_in_harmonic_interfaces_mix_structure.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vhcH8wFI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_good_ux_practices_in_harmonic_interfaces_mix_structure.png" alt="" width="800" height="643"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This Structure is &lt;strong&gt;the holy grail of Harmonic Interfaces&lt;/strong&gt;, we can manipulate specific aspects in &lt;strong&gt;Tablets, Phones, Desktops, TV's, etc.&lt;/strong&gt;, and choose them on the different platforms that Xamarin.Forms supports*&lt;strong&gt;(UWP, Android, iOS, macOS, Samsung Tizen, etc.)&lt;/strong&gt;*.&lt;/p&gt;

&lt;p&gt;The following will name the parts that are not explicitly described in the &lt;strong&gt;Mix Structure&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base.Property:&lt;/strong&gt; The &lt;strong&gt;&lt;em&gt;Base&lt;/em&gt;&lt;/strong&gt; can be a Layout, Control, RowDefinition or ColumnDefinition, and the &lt;strong&gt;&lt;em&gt;Property&lt;/em&gt;&lt;/strong&gt; is the property from which the Mix will be added. Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;RowDefinition&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;RowDefinition.Height&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!--  Use of the "Mix" here  --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/RowDefinition.Height&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/RowDefinition&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;Image&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Image.HeightRequest&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!--  Use of the "Mix" here  --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Image.HeightRequest&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Image&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Property Argument:&lt;/strong&gt; It is the argument that the assigned property takes, in the following example the property argument is of type Double.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Property Value:&lt;/strong&gt; It is the value of the property, according to the given argument.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Image&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Image.HeightRequest&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;OnIdiom&lt;/span&gt; &lt;span class="na"&gt;x:TypeArguments=&lt;/span&gt;&lt;span class="s"&gt;"x:Double"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;OnIdiom.Phone&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;OnPlatform&lt;/span&gt; &lt;span class="na"&gt;x:TypeArguments=&lt;/span&gt;&lt;span class="s"&gt;"x:Double"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;On&lt;/span&gt;
                        &lt;span class="na"&gt;Platform=&lt;/span&gt;&lt;span class="s"&gt;"iOS,Android"&lt;/span&gt;
                        &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"120"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/OnPlatform&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/OnIdiom.Phone&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;OnIdiom.Tablet&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;OnPlatform&lt;/span&gt; &lt;span class="na"&gt;x:TypeArguments=&lt;/span&gt;&lt;span class="s"&gt;"x:Double"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;On&lt;/span&gt;
                        &lt;span class="na"&gt;Platform=&lt;/span&gt;&lt;span class="s"&gt;"iOS"&lt;/span&gt;
                        &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"540"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;On&lt;/span&gt;
                        &lt;span class="na"&gt;Platform=&lt;/span&gt;&lt;span class="s"&gt;"Android"&lt;/span&gt;
                        &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"470.5"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/OnPlatform&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/OnIdiom.Tablet&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/OnIdiom&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Image.HeightRequest&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Image&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Mix in Phones
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v334oDQ8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_good_ux_practices_in_harmonic_interfaces_mix_phone.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v334oDQ8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_good_ux_practices_in_harmonic_interfaces_mix_phone.png" alt="" width="800" height="643"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Without using Mix on Phones:&lt;/strong&gt; The image occupies almost the entire height of the device, is generated scrolled and a terrible global display of the user.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;With Mix on Phones:&lt;/em&gt;&lt;/strong&gt; The image has a fixed height, optimal display for the user and therefore good UX.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mix in Tablets
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YrrHoLF---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_good_ux_practices_in_harmonic_interfaces_mix_tablet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YrrHoLF---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_2_good_ux_practices_in_harmonic_interfaces_mix_tablet.png" alt="" width="800" height="643"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Without using Mix on Tablets:&lt;/strong&gt; By having an image with a fixed altitude and a defined distance with the lower controls, it generates a large space, in this case, the visual point is centered on the image of the food, which is little appreciated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With Mix on Tablets:&lt;/strong&gt; By generating proportions to the image and the distance with the lower controls, these adapt, eliminating said large space, the visual point of the image is good, and therefore there is a good UX.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;






&lt;h2&gt;
  
  
  Get the Code
&lt;/h2&gt;

&lt;p&gt;All the code is open source, you can see it on &lt;a href="https://github.com/danielmonettelli/XF_MicunaFood/tree/XF_MicunaFood_Part2"&gt;my github&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://monettelliuikit.github.io/"&gt;MonettelliUIKIT&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/xamarin/community-toolkit/"&gt;Xamarin Community Toolkit&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://material.io/"&gt;Material Design&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://channel9.msdn.com/Shows/XamarinShow/XamarinForms-101-OnIdiom-Adjusting-UI-Based-on-Device-Type"&gt;OnIdiom (Adjusting UI Based on Device Type)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://channel9.msdn.com/Shows/XamarinShow/XamarinForms-101-OnPlatform-Adjusting-UI-Based-on-Operation-System"&gt;OnPlatform (Adjusting UI Based on Operating System)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/xamarin/xamarin-forms/platform/ios/page-safe-area-layout"&gt;Safe Area Layout Guide on iOS&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sthewissen/Xamarin.Forms.PancakeView#xamarinformspancakeview"&gt;Xamarin.Forms.PancakeView&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dribbble.com/"&gt;Dribbble&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pexels.com/es-es/"&gt;Pexels&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Xamarin Community Toolkit&lt;/strong&gt; is our ally when it comes to creating &lt;strong&gt;productive applications&lt;/strong&gt;, a &lt;strong&gt;kit supported by community members under the guidance of the Xamarin team&lt;/strong&gt;, that makes it a &lt;strong&gt;super reliable nuget package&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;There are many ways to adapt our elements in an interface, &lt;strong&gt;Mix&lt;/strong&gt; is ​​one of them, because it &lt;strong&gt;encompasses devices and platforms that Xamarin.Forms supports&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Another thing that was seen are the &lt;strong&gt;colored guides for the locations of elements&lt;/strong&gt;, this method helps to &lt;strong&gt;place the different layouts and controls that exist in a XAML interface&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The use of &lt;strong&gt;Material Design&lt;/strong&gt; is essential as part of &lt;strong&gt;good UI/UX practices&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember that you can give feedback and with the help of my repository draw your own conclusions, if you have any questions or constructive criticism write to me below this publication, thank you very much.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>xamarin</category>
      <category>xamarinforms</category>
      <category>ux</category>
    </item>
    <item>
      <title>Xamarin.Forms UI/UX Challenges - Micuna Food - Part1</title>
      <dc:creator>Daniel Monettelli</dc:creator>
      <pubDate>Sun, 20 Feb 2022 04:09:00 +0000</pubDate>
      <link>https://dev.to/danielmonettelli/xamarinforms-uiux-challenges-micuna-food-part1-2n43</link>
      <guid>https://dev.to/danielmonettelli/xamarinforms-uiux-challenges-micuna-food-part1-2n43</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;This first part of the challenge the protagonist is Visual State Manager, the easy use of changing one state to another through XAML and C# code-behind and combining with styles, makes it a powerful Xamarin.Forms feature.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This publication is part of the &lt;a href="https://www.luisbeltran.mx/2020/11/16/segundo-calendario-de-adviento-de-xamarin-en-espanol/"&gt;Second Xamarin Advent Calendar in Spanish&lt;/a&gt; organized by &lt;a href="https://twitter.com/darkicebeam"&gt;Dr. Luis Beltrán&lt;/a&gt;, and of the third &lt;a href="https://aspnetcoremaster.com/calendario-adviento-csharp-2020.html"&gt;C# Advent Calendar in Spanish&lt;/a&gt; organized by &lt;a href="https://twitter.com/jbenjamincc"&gt;Ing. Benjamín Camacho&lt;/a&gt;, thank you very much for being part of these great initiatives.&lt;/p&gt;




&lt;h2&gt;
  
  
  Inspirational Design
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dribbble.com/ghulaam-rasool"&gt;Ghulam Rasool&lt;/a&gt;'s Delicious Food design is a cool light theme from Material Design, it has icons and labels at the top, a category section, with two horizontal lists, accompanied by a stylish TabView that highlights the design.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l0D7Qbkb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_design.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l0D7Qbkb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_design.png" alt="" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Proportions in the Interface
&lt;/h2&gt;

&lt;p&gt;In my other posts I always say that Grid is my ally when I create &lt;a href="https://danielmonettelli.github.io/posts/harmonic-interfaces-with-monettelliuikit-in-xamarin-forms-vol-1/"&gt;Harmonic Applications in Xamarin.Forms&lt;/a&gt;, since each control and layout has its own location thanks to the proportions, the following figures are a clear example of this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3qRo_3Zf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_proportions_on_base_homepage.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3qRo_3Zf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_proportions_on_base_homepage.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6ih_7CzL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images5_1_proportions_on_tabview.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6ih_7CzL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images5_1_proportions_on_tabview.png" alt="" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Proportions in HomePage.xaml&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Grid&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;Grid.RowDefinitions&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.869*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"18"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Grid.RowDefinitions&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.04*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.92*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.04*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;ScrollView&lt;/span&gt;
        &lt;span class="na"&gt;Grid.RowSpan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
        &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Grid&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"24"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"56"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  3  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"16"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  4  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  5  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  6  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  7  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"24"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  8  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"70"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  9  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"32"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  10  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  11  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"32"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  12  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  13  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"122"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Grid.RowDefinitions&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.04*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.087*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.68*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  3  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.153*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="c"&gt;&amp;lt;!--  4  --&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.04*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;

            &lt;span class="c"&gt;&amp;lt;!--  Top Icons and Labels  --&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  Category List         --&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  Dynamic Food List     --&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!--  List of All Foods     --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ScrollView&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!--  Elegant TabView  --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;tabs:TabHostView&lt;/span&gt;
        &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
        &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/tabs:TabHostView&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Styles
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EMmI_Wil--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_styles_location.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EMmI_Wil--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_styles_location.png" alt="" width="800" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://monettelliuikit.github.io/"&gt;MonettelliUIKIT&lt;/a&gt;'s clean UI style architecture separates styles into Styles.xaml files linked with a ResourceDictionary into the various interfaces that are grouped in your folder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Linked styles&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ContentPage.Resources&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;ResourceDictionary&lt;/span&gt; &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"Styles.xaml"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ContentPage.Resources&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Top Icons and Label
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WAtOhQFQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_top_icons_and_labels.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WAtOhQFQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_top_icons_and_labels.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to my method of proportions it is so easy to place the Image and Label controls.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--  Top Icons and Labels  --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_filter_line}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.RowSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
    &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_shopping_cart_line}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Delicious Food"&lt;/span&gt;
    &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtHeadLine5_1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"6"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;MaxLines=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
    &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"We made fresh and Healthy food"&lt;/span&gt;
    &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSubtitle1_1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Category List
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FjN57faV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_part2_1_category_list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FjN57faV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_part2_1_category_list.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The list of food categories has &lt;a href="https://devblogs.microsoft.com/xamarin/adaptive-mobile-designs-with-flexlayout/"&gt;FlexLayout&lt;/a&gt; as its parent whose content is linked to a collection of items through &lt;a href="https://devblogs.microsoft.com/xamarin/xamarin-forms-3-5-a-little-bindable-love/"&gt;BindableLayout&lt;/a&gt;, each item is encapsulated with PancakeView and its icons are &lt;a href="https://devblogs.microsoft.com/xamarin/embedded-fonts-xamarin-forms/"&gt;Embedded Fonts&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--  Category List  --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;FlexLayout&lt;/span&gt;
    &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"CategoryList"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"8"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
    &lt;span class="na"&gt;Direction=&lt;/span&gt;&lt;span class="s"&gt;"Row"&lt;/span&gt;
    &lt;span class="na"&gt;JustifyContent=&lt;/span&gt;&lt;span class="s"&gt;"SpaceBetween"&lt;/span&gt;
    &lt;span class="na"&gt;BindableLayout.ItemsSource=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Categories}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;BindableLayout.ItemTemplate&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;DataTemplate&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;yummy:PancakeView&lt;/span&gt;
                &lt;span class="na"&gt;CornerRadius=&lt;/span&gt;&lt;span class="s"&gt;"20"&lt;/span&gt;
                &lt;span class="na"&gt;WidthRequest=&lt;/span&gt;&lt;span class="s"&gt;"70"&lt;/span&gt;
                &lt;span class="na"&gt;HasShadow=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
                &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource vsm_surfaceCategory}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;yummy:PancakeView.GestureRecognizers&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;TapGestureRecognizer&lt;/span&gt; &lt;span class="na"&gt;Tapped=&lt;/span&gt;&lt;span class="s"&gt;"SelectedCategory_Tapped"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/yummy:PancakeView.GestureRecognizers&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;StackLayout&lt;/span&gt;
                    &lt;span class="na"&gt;VerticalOptions=&lt;/span&gt;&lt;span class="s"&gt;"FillAndExpand"&lt;/span&gt;
                    &lt;span class="na"&gt;HorizontalOptions=&lt;/span&gt;&lt;span class="s"&gt;"FillAndExpand"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
                        &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"ImageCategory"&lt;/span&gt;
                        &lt;span class="na"&gt;HorizontalOptions=&lt;/span&gt;&lt;span class="s"&gt;"CenterAndExpand"&lt;/span&gt;
                        &lt;span class="na"&gt;VerticalOptions=&lt;/span&gt;&lt;span class="s"&gt;"CenterAndExpand"&lt;/span&gt;
                        &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Image_Category}"&lt;/span&gt;
                        &lt;span class="na"&gt;FontFamily=&lt;/span&gt;&lt;span class="s"&gt;"MonettelliFontIcons"&lt;/span&gt;
                        &lt;span class="na"&gt;FontSize=&lt;/span&gt;&lt;span class="s"&gt;"40"&lt;/span&gt;
                        &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource vsm_labelCategory}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
                        &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"LabelCategory"&lt;/span&gt;
                        &lt;span class="na"&gt;IsVisible=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;
                        &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Name_Category}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/StackLayout&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/yummy:PancakeView&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/DataTemplate&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/BindableLayout.ItemTemplate&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/FlexLayout&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the &lt;strong&gt;HomeViewModel&lt;/strong&gt; class, the &lt;strong&gt;Categories collection&lt;/strong&gt; is instantiated in the constructor by &lt;strong&gt;adding the name and the corresponding Font Icons&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&lt;em&gt;GetItemsForCategory( )&lt;/em&gt;&lt;/strong&gt; method will first &lt;strong&gt;clear the list&lt;/strong&gt;, then the items variable starts a search action for &lt;strong&gt;Name_VarietyFood&lt;/strong&gt; depending on the &lt;strong&gt;selected Category&lt;/strong&gt;, at the end &lt;strong&gt;ToList( )&lt;/strong&gt; converts it from &lt;strong&gt;IEnumerable to List&lt;/strong&gt;, then if there is a Category selected, we update the new &lt;strong&gt;added items in a foreach loop&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HomeViewModel&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BaseViewModel&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ObservableRangeCollection&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Categories&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;HomeViewModel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="c1"&gt;//...&lt;/span&gt;

        &lt;span class="n"&gt;Categories&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ObservableRangeCollection&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Name_Category&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Fast food"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;Image_Category&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;MonettelliFontIcons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;icon_fast_food_line&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Name_Category&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Dessert"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;Image_Category&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;MonettelliFontIcons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;icon_dessert_line&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Name_Category&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Beer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;Image_Category&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;MonettelliFontIcons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;icon_beer_line&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Name_Category&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Gourmet Food"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;Image_Category&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;MonettelliFontIcons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;icon_gourmet_food_line&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;

        &lt;span class="p"&gt;};&lt;/span&gt;

       &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;GetItemsForCategory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isSelected&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;DynamicFoods&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Foods&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;VarietyFoods&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name_VarietyFood&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;ToList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isSelected&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;DynamicFoods&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FoodsViewModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;&lt;em&gt;FoodsViewModel&lt;/em&gt;&lt;/strong&gt; class is responsible for &lt;strong&gt;refreshing the changes of the public properties of the DynamicFoods list thanks to the SetProperty( )&lt;/strong&gt; method, part of the &lt;a href="https://www.youtube.com/watch?v=y8ZqEOLDeo8"&gt;MVVM Helpers&lt;/a&gt; nuget package, &lt;strong&gt;in the constructor these initial properties are instantiated with the data members of the Food class&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FoodsViewModel&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BaseViewModel&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;VarietyFood&lt;/span&gt; &lt;span class="n"&gt;varietyFoods&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;name_food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;image_food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;price_food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;short_description_food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;long_description_food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;VarietyFood&lt;/span&gt; &lt;span class="n"&gt;VarietyFoods&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;varietyFoods&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;SetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="n"&gt;varietyFoods&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name_Food&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;name_food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;SetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="n"&gt;name_food&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Image_Food&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;image_food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;SetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="n"&gt;image_food&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;Price_Food&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;price_food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;SetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="n"&gt;price_food&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Short_Description_Food&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;short_description_food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;SetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="n"&gt;short_description_food&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Long_Description_Food&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;long_description_food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;SetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="n"&gt;long_description_food&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;FoodsViewModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Food&lt;/span&gt; &lt;span class="n"&gt;food&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;VarietyFoods&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;food&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;VarietyFoods&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Name_Food&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;food&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name_Food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Image_Food&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;food&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Image_Food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Price_Food&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;food&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Price_Food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Short_Description_Food&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;food&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Short_Description_Food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Long_Description_Food&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;food&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Long_Description_Food&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The HomeViewModel is bound with the &lt;strong&gt;BindingContext&lt;/strong&gt; and a private keyword from that ViewModel, which will be used in the ChangeFontIconColor( ) method.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&lt;em&gt;ChangeFontIconColor( )&lt;/em&gt;&lt;/strong&gt; method consists of two variables similar to &lt;strong&gt;x:Name&lt;/strong&gt;, the first indicates the category icon, while the second links the &lt;strong&gt;Name_Category(see HomePage.xaml)&lt;/strong&gt;, the string &lt;strong&gt;variable visualState makes use of a ternary operator&lt;/strong&gt;, whose strings are the states assigned by VSM, the &lt;strong&gt;GoToState( )&lt;/strong&gt; method activates these states, finally, the &lt;strong&gt;GetItemsForCategory( )&lt;/strong&gt; method will take care of displaying the items based on the &lt;strong&gt;labelCategory.Text&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&lt;em&gt;SelectedCategory_Tapped( )&lt;/em&gt;&lt;/strong&gt; event consists of two variables, the first one casts a &lt;strong&gt;VisualElement(or the name of the layout of said event)&lt;/strong&gt; and the second one casts but the &lt;strong&gt;collection's parent layout (FlexLayout)&lt;/strong&gt;. For the non-selected items in the category list to be in &lt;strong&gt;"normal" mode, we use the foreach loop&lt;/strong&gt; to the &lt;strong&gt;parent.Children list&lt;/strong&gt;, finally, we &lt;strong&gt;add the methods with "Selected" states&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HomePage&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ContentPage&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;HomeViewModel&lt;/span&gt; &lt;span class="n"&gt;homeViewModel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;HomePage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;InitializeComponent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="n"&gt;BindingContext&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;homeViewModel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;HomeViewModel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;SelectedCategory_Tapped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EventArgs&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;surfaceCategory&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;VisualElement&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;surfaceCategory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Parent&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;FlexLayout&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;View&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Children&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;VisualStateManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GoToState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Normal"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="nf"&gt;ChangeFontIconColor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;VisualStateManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GoToState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;surfaceCategory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Selected"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;ChangeFontIconColor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;surfaceCategory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ChangeFontIconColor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VisualElement&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isSelected&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;imageCategory&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FindByName&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;"ImageCategory"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;labelCategory&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FindByName&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;"LabelCategory"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;visualState&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;isSelected&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s"&gt;"Selected"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Normal"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;VisualStateManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GoToState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;imageCategory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;visualState&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;homeViewModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetItemsForCategory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;labelCategory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;isSelected&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XuWnrVWE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_part2_2_layout_children.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XuWnrVWE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_part2_2_layout_children.png" alt="" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&lt;em&gt;FilterCategory( )&lt;/em&gt;&lt;/strong&gt; method is responsible for selecting a category automatically when the application is opened, in the &lt;strong&gt;SelectedCategory_Tapped( )&lt;/strong&gt; event, the sender parameter is activated with &lt;strong&gt;Layout.Children[ ]&lt;/strong&gt; indicating the category number in the array, finally, it is said &lt;strong&gt;instance method in the constructor&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HomePage&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ContentPage&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;HomePage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;InitializeComponent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// ...&lt;/span&gt;

        &lt;span class="nf"&gt;FilterCategory&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;FilterCategory&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;SelectedCategory_Tapped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CategoryList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Children&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;SelectedCategory_Tapped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EventArgs&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Dynamic Food List
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CBvGGsaV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_part3_dynamic_food_list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CBvGGsaV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_part3_dynamic_food_list.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This dynamic list uses &lt;a href="https://devblogs.microsoft.com/xamarin/5-quick-tips-for-collectionview/"&gt;CollectionView&lt;/a&gt;, its orientation is horizontal, it has two proportional layers for the &lt;strong&gt;food image that is above the child Frame&lt;/strong&gt;, and they are optimized thanks to the &lt;a href="https://askxammy.com/optimizing-handling-images-with-ffimageloading/"&gt;FFImageLoading&lt;/a&gt; nuget package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--  Dynamic Food List  --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;CollectionView&lt;/span&gt;
    &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"collectionView_MicunaFood"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt;
    &lt;span class="na"&gt;ItemsSource=&lt;/span&gt;&lt;span class="s"&gt;"{Binding DynamicFoods}"&lt;/span&gt;
    &lt;span class="na"&gt;SelectionMode=&lt;/span&gt;&lt;span class="s"&gt;"Single"&lt;/span&gt;
    &lt;span class="na"&gt;HeightRequest=&lt;/span&gt;&lt;span class="s"&gt;"288"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;CollectionView.ItemsLayout&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;GridItemsLayout&lt;/span&gt;
            &lt;span class="na"&gt;Orientation=&lt;/span&gt;&lt;span class="s"&gt;"Horizontal"&lt;/span&gt;
            &lt;span class="na"&gt;HorizontalItemSpacing=&lt;/span&gt;&lt;span class="s"&gt;"35"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/CollectionView.ItemsLayout&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;CollectionView.ItemTemplate&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;DataTemplate&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Grid&lt;/span&gt; &lt;span class="na"&gt;WidthRequest=&lt;/span&gt;&lt;span class="s"&gt;"190"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"103"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"59"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"126"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"15"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"160"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"15"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;Frame&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.RowSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
                    &lt;span class="na"&gt;CornerRadius=&lt;/span&gt;&lt;span class="s"&gt;"20"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;Frame.Background&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;LinearGradientBrush&lt;/span&gt; &lt;span class="na"&gt;StartPoint=&lt;/span&gt;&lt;span class="s"&gt;"0,0"&lt;/span&gt; &lt;span class="na"&gt;EndPoint=&lt;/span&gt;&lt;span class="s"&gt;"1,0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;GradientStop&lt;/span&gt; &lt;span class="na"&gt;Offset=&lt;/span&gt;&lt;span class="s"&gt;"0.1"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource colStartSurf1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;GradientStop&lt;/span&gt; &lt;span class="na"&gt;Offset=&lt;/span&gt;&lt;span class="s"&gt;"1.0"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource colEndSurf1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;/LinearGradientBrush&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;/Frame.Background&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;Grid&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.32*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.086*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  3  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.043*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  4  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  5  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.032*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  6  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.054*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  7  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  8  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.043*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  9  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.079*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;/Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.08*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.042*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.462*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  3  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.126*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  4  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.168*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  5  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.042*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  6  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.08*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
                            &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Name_Food}"&lt;/span&gt;
                            &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSubtitle1_2}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
                            &lt;span class="na"&gt;MaxLines=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                            &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Short_Description_Food}"&lt;/span&gt;
                            &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSubtitle2_1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"7"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                            &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Price_Food, StringFormat='{0:C2}'}"&lt;/span&gt;
                            &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSubtitle1_2}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;yummy:PancakeView&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"6"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.RowSpan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                            &lt;span class="na"&gt;CornerRadius=&lt;/span&gt;&lt;span class="s"&gt;"80"&lt;/span&gt;
                            &lt;span class="na"&gt;BackgroundColor=&lt;/span&gt;&lt;span class="s"&gt;"{DynamicResource colPrim}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt;
                                &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                                &lt;span class="na"&gt;Grid.RowSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                                &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                                &lt;span class="na"&gt;HorizontalOptions=&lt;/span&gt;&lt;span class="s"&gt;"Center"&lt;/span&gt;
                                &lt;span class="na"&gt;VerticalOptions=&lt;/span&gt;&lt;span class="s"&gt;"Center"&lt;/span&gt;
                                &lt;span class="na"&gt;TranslationY=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                                &lt;span class="na"&gt;TranslationX=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                                &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_heart_line}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;/yummy:PancakeView&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/Frame&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ffimageloading:CachedImage&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.RowSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                    &lt;span class="na"&gt;CacheDuration=&lt;/span&gt;&lt;span class="s"&gt;"30"&lt;/span&gt;
                    &lt;span class="na"&gt;DownsampleToViewSize=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
                    &lt;span class="na"&gt;FadeAnimationForCachedImages=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
                    &lt;span class="na"&gt;FadeAnimationEnabled=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
                    &lt;span class="na"&gt;FadeAnimationDuration=&lt;/span&gt;&lt;span class="s"&gt;"100"&lt;/span&gt;
                    &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Image_Food}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/DataTemplate&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/CollectionView.ItemTemplate&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/CollectionView&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;strong&gt;HomeViewModel&lt;/strong&gt;, the &lt;strong&gt;public collection DynamicFoods&lt;/strong&gt; is created and then instantiated in the constructor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HomeViewModel&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BaseViewModel&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ObservableRangeCollection&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FoodsViewModel&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;DynamicFoods&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;HomeViewModel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="n"&gt;DynamicFoods&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ObservableRangeCollection&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FoodsViewModel&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  List of All Foods
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xbXru687--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_part4_list_of_all_foods.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xbXru687--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_part4_list_of_all_foods.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This list is static, it is inside a &lt;a href="https://devblogs.microsoft.com/xamarin/carouselview-challenge-wrap-up/"&gt;CarouselView&lt;/a&gt;, its orientation is horizontal, it has two proportional layers since the image of the food protrudes a little from the Child Frame, it is also optimized with &lt;a href="https://askxammy.com/optimizing-handling-images-with-ffimageloading/"&gt;FFImageLoading&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--  List of All Foods  --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;CarouselView&lt;/span&gt;
    &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;"carouselView_MicunaFood"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"12"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
    &lt;span class="na"&gt;HeightRequest=&lt;/span&gt;&lt;span class="s"&gt;"157"&lt;/span&gt;
    &lt;span class="na"&gt;ItemsSource=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Foods}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;CarouselView.ItemsLayout&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;LinearItemsLayout&lt;/span&gt;
            &lt;span class="na"&gt;Orientation=&lt;/span&gt;&lt;span class="s"&gt;"Horizontal"&lt;/span&gt;
            &lt;span class="na"&gt;SnapPointsType=&lt;/span&gt;&lt;span class="s"&gt;"MandatorySingle"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/CarouselView.ItemsLayout&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;CarouselView.ItemTemplate&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;DataTemplate&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Grid&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.076*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.924*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.577*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.196*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.227*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;Frame&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                    &lt;span class="na"&gt;CornerRadius=&lt;/span&gt;&lt;span class="s"&gt;"20"&lt;/span&gt;
                    &lt;span class="na"&gt;HeightRequest=&lt;/span&gt;&lt;span class="s"&gt;"145"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;Frame.Background&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;LinearGradientBrush&lt;/span&gt; &lt;span class="na"&gt;StartPoint=&lt;/span&gt;&lt;span class="s"&gt;"0,0"&lt;/span&gt; &lt;span class="na"&gt;EndPoint=&lt;/span&gt;&lt;span class="s"&gt;"1,0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;GradientStop&lt;/span&gt; &lt;span class="na"&gt;Offset=&lt;/span&gt;&lt;span class="s"&gt;"0.1"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource colStartSurf1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;GradientStop&lt;/span&gt; &lt;span class="na"&gt;Offset=&lt;/span&gt;&lt;span class="s"&gt;"1.0"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource colEndSurf1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;/LinearGradientBrush&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;/Frame.Background&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;Grid&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.2*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.055*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  3  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  4  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.11*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  5  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  6  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"0.2*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;/Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  0  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"23"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  1  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.49*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  2  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.064*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                            &lt;span class="c"&gt;&amp;lt;!--  3  --&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.422*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                            &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Name_Food}"&lt;/span&gt;
                            &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSubtitle1_2}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                            &lt;span class="na"&gt;MaxLines=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
                            &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Short_Description_Food}"&lt;/span&gt;
                            &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSubtitle2_1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
                            &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                            &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Price_Food, StringFormat='{0:C2}'}"&lt;/span&gt;
                            &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSubtitle1_2}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/Frame&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ffimageloading:CachedImage&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.RowSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                    &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                    &lt;span class="na"&gt;CacheDuration=&lt;/span&gt;&lt;span class="s"&gt;"30"&lt;/span&gt;
                    &lt;span class="na"&gt;DownsampleToViewSize=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
                    &lt;span class="na"&gt;FadeAnimationForCachedImages=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
                    &lt;span class="na"&gt;FadeAnimationEnabled=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
                    &lt;span class="na"&gt;FadeAnimationDuration=&lt;/span&gt;&lt;span class="s"&gt;"100"&lt;/span&gt;
                    &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Image_Food}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/DataTemplate&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/CarouselView.ItemTemplate&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/CarouselView&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In HomeViewModel, the &lt;strong&gt;public Foods collection&lt;/strong&gt; is created and then instantiated &lt;strong&gt;in the constructor adding all the data for each property&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HomeViewModel&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BaseViewModel&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ObservableRangeCollection&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Food&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Foods&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;HomeViewModel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="n"&gt;Foods&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ObservableRangeCollection&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Food&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Food&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;VarietyFoods&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;VarietyFood&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                      &lt;span class="n"&gt;Name_VarietyFood&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Fast food"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="n"&gt;Image_VarietyFood&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;MonettelliFontIcons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;icon_fast_food_line&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="n"&gt;Name_Food&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Black ramen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;Image_Food&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://raw.githubusercontent.com/danielmonettelli/Area51/main/Foods/img_black_ramen.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;Price_Food&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;30.00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;Short_Description_Food&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Thick and milky broth with an intense flavor."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;Long_Description_Food&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Our Hakata Black Ramen is a rich and thick stock tonkotsu ramen typical of the Hakata area, in Fukuoka (south of the country), which is made by cooking pork bones for hours to obtain a thick and milky broth with an intense flavor that is It is accompanied by strong flavors such as garlic or ginger, resulting in a powerful umami."&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;

            &lt;span class="c1"&gt;// more food items...&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Elegant TabView
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3xIRl3mh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_part5_elegant_tabview.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3xIRl3mh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/5_1_part5_elegant_tabview.png" alt="" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create this great &lt;a href="https://askxammy.com/simple-way-to-create-a-floating-button-in-xamarin-forms/"&gt;floating button style&lt;/a&gt; TabView I used the &lt;a href="https://github.com/roubachof/Sharpnado.Tabs#sharpnadotabs"&gt;Sharpnado.Tabs&lt;/a&gt; nuget package, a steroidal layout, fully customizable and with excellent performance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Grid&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!--  ...  --&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!--  Elegant TabView  --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;tabs:TabHostView&lt;/span&gt;
        &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
        &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
        &lt;span class="na"&gt;HeightRequest=&lt;/span&gt;&lt;span class="s"&gt;"86"&lt;/span&gt;
        &lt;span class="na"&gt;CornerRadius=&lt;/span&gt;&lt;span class="s"&gt;"35"&lt;/span&gt;
        &lt;span class="na"&gt;IsSegmented=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
        &lt;span class="na"&gt;Shades=&lt;/span&gt;&lt;span class="s"&gt;"{sh:ShadeStack}"&lt;/span&gt;
        &lt;span class="na"&gt;BackgroundColor=&lt;/span&gt;&lt;span class="s"&gt;"{DynamicResource colPrim}"&lt;/span&gt;
        &lt;span class="na"&gt;TabType=&lt;/span&gt;&lt;span class="s"&gt;"Fixed"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;tabs:TabHostView.Tabs&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;tabs:BottomTabItem&lt;/span&gt;
                &lt;span class="na"&gt;IconImageSource=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_tab_home_line}"&lt;/span&gt;
                &lt;span class="na"&gt;IsTextVisible=&lt;/span&gt;&lt;span class="s"&gt;"False"&lt;/span&gt;
                &lt;span class="na"&gt;SelectedTabColor=&lt;/span&gt;&lt;span class="s"&gt;"{DynamicResource colTer}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;tabs:BottomTabItem&lt;/span&gt;
                &lt;span class="na"&gt;IconImageSource=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_tab_wallet_line}"&lt;/span&gt;
                &lt;span class="na"&gt;IsTextVisible=&lt;/span&gt;&lt;span class="s"&gt;"False"&lt;/span&gt;
                &lt;span class="na"&gt;SelectedTabColor=&lt;/span&gt;&lt;span class="s"&gt;"{DynamicResource colTer}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;tabs:BottomTabItem&lt;/span&gt;
                &lt;span class="na"&gt;IconImageSource=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_tab_conversation_line}"&lt;/span&gt;
                &lt;span class="na"&gt;IsTextVisible=&lt;/span&gt;&lt;span class="s"&gt;"False"&lt;/span&gt;
                &lt;span class="na"&gt;SelectedTabColor=&lt;/span&gt;&lt;span class="s"&gt;"{DynamicResource colTer}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;tabs:BottomTabItem&lt;/span&gt;
                &lt;span class="na"&gt;IconImageSource=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource icon_tab_user_line}"&lt;/span&gt;
                &lt;span class="na"&gt;IsTextVisible=&lt;/span&gt;&lt;span class="s"&gt;"False"&lt;/span&gt;
                &lt;span class="na"&gt;SelectedTabColor=&lt;/span&gt;&lt;span class="s"&gt;"{DynamicResource colTer}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;/tabs:TabHostView.Tabs&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/tabs:TabHostView&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;






&lt;h2&gt;
  
  
  Get the Code
&lt;/h2&gt;

&lt;p&gt;All the code is open source, you can see it on &lt;a href="https://github.com/danielmonettelli/XF_MicunaFood/tree/XF_MicunaFood_Part1"&gt;my github&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://monettelliuikit.github.io/"&gt;MonettelliUIKIT&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/visual-state-manager"&gt;Xamarin.Forms Visual State Manager&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/flex-layout"&gt;Xamarin.Forms FlexLayout&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/roubachof/Sharpnado.Tabs#sharpnadotabs"&gt;Sharpnado.Tabs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sthewissen/Xamarin.Forms.PancakeView#xamarinformspancakeview"&gt;Xamarin.Forms.PancakeView&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dribbble.com/"&gt;Dribbble&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pexels.com/es-es/"&gt;Pexels&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;I really enjoyed the challenge, I made use of &lt;strong&gt;collections in C#&lt;/strong&gt;, a feature that we will see in all applications and that it is important to know how to use them to interact with the data of an API, a local json, etc. Regarding the interface, I am amazed by the power that &lt;strong&gt;Visual State Manager&lt;/strong&gt; has, I will take it into account in the next versions of &lt;strong&gt;MonettelliUIKIT&lt;/strong&gt;. Thank you very much for viewing this post, see you in the next part.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>xamarin</category>
      <category>xamarinforms</category>
      <category>ux</category>
    </item>
    <item>
      <title>Harmonic Interfaces with MonettelliUIKIT in Xamarin.Forms Vol 1</title>
      <dc:creator>Daniel Monettelli</dc:creator>
      <pubDate>Sun, 20 Feb 2022 03:31:00 +0000</pubDate>
      <link>https://dev.to/danielmonettelli/harmonic-interfaces-with-monettelliuikit-in-xamarinforms-vol-1-259m</link>
      <guid>https://dev.to/danielmonettelli/harmonic-interfaces-with-monettelliuikit-in-xamarinforms-vol-1-259m</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;When creating interfaces in Xamarin.Forms, most developers (and myself included) use the physical device or the emulator to give the appearance of the design that is being replicated, and what about the rest of the devices that exist around the world ?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;From this question this publication is born, in my beginnings as a developer of Xamarin Native and Xamarin.Forms I focused on the C # language, as I was learning, I realized that the appearance of interfaces are also a fundamental complement in applications, therefore, I continue studying various UI/UX courses, and therefore, my comfort zone I extend it more and more. To date, I love creating beautiful applications, harmonizing each device (phones, tablets, desktops, etc.).&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿What are Harmonic interfaces?
&lt;/h2&gt;

&lt;p&gt;Harmonic Interfaces is the balance of a group of controls with the dimensions of the devices that exist today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Xamarin.Forms&lt;/strong&gt; and its powerful &lt;strong&gt;Hot Reload&lt;/strong&gt;, allow you to visualize in real time the process of the interfaces in XAML and C #, with this great tool, I did my practices to perfect my interfaces, and to present my results in this publication.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l8s-uZjf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_harmonic_interface_in_action.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l8s-uZjf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_harmonic_interface_in_action.png" alt="" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The harmonic layout
&lt;/h2&gt;

&lt;p&gt;Xamarin.Forms has different layouts, each with a purpose, of all of them, the one indicated for me is  &lt;a href="https://askxammy.com/working-with-gridlayout-in-xamarin-forms/"&gt;GridLayout&lt;/a&gt;, because with &lt;strong&gt;RowDefinitions&lt;/strong&gt; and &lt;strong&gt;ColumnDefinitions&lt;/strong&gt; I can cleanly manage my controls, however what stands out is proportional mode, and that is where we will focus on this post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M55_a76B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_gridlayout_structure.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M55_a76B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_gridlayout_structure.png" alt="" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Harmonic proportions
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;proportional mode&lt;/strong&gt; is in relation to the dimensions of the device and the content involved in the interface, that is, if a certain row and/or column proportion is added to a control, it is adapted to each device.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2nnfM481--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_harmonic_proportions_in_action.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2nnfM481--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_harmonic_proportions_in_action.png" alt="" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿How to use proportions in GridLayout?
&lt;/h2&gt;

&lt;p&gt;For this, it is necessary to use a design tool &lt;em&gt;(in my case Adobe XD)&lt;/em&gt;, adding semi-transparent blocks of different colors &lt;em&gt;(both for rows and columns)&lt;/em&gt; to all the spaces of your design, in order to cover the positions that the controls, remember that each design has its difficulty.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5bzMD5xr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_using_proportions_in_adobe_xd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5bzMD5xr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_using_proportions_in_adobe_xd.png" alt="" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/jucaripo"&gt;Ing. Juan Carlos Ricalde Poveda&lt;/a&gt; &lt;em&gt;(UI/UX Expert)&lt;/em&gt;, recommends that the artboard &lt;em&gt;(Adobe XD or another tool)&lt;/em&gt; be done with the smallest screen size &lt;em&gt;(preferably Android Phones)&lt;/em&gt;, this helps extend and not reduce the space taken up by the controls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ouEBNKaq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_device_sizes_use_case.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ouEBNKaq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_device_sizes_use_case.png" alt="" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;"Prototype"&lt;/strong&gt; section, we create the flow of the designs(if there are two or more interfaces).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T_k7o4H5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_adobe_xd_prototype_section.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T_k7o4H5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_adobe_xd_prototype_section.png" alt="" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;"Share"&lt;/strong&gt; section, in the settings part, select the &lt;strong&gt;"Development"&lt;/strong&gt; mode, once the link is created, open in the default browser.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; To have a harmonic ratio, divide the row and/or column distance of a control by the total distance of the design itself.&lt;br&gt;
{: .prompt-tip }&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yVq4Z-7---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_adobe_xd_share_section.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yVq4Z-7---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_adobe_xd_share_section.png" alt="" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PuuSzvzz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_calculation_of_proportions_in_the_link_made_for_adobe_xd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PuuSzvzz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_calculation_of_proportions_in_the_link_made_for_adobe_xd.png" alt="" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the Xamarin.Forms XAML, add &lt;strong&gt;Grid&lt;/strong&gt; to encapsulate the different controls that your interface will have, together with the harmonic proportions that have been calculated, then with &lt;strong&gt;Grid.Colum&lt;/strong&gt; and &lt;strong&gt;Grid.Row&lt;/strong&gt;, we position the controls, if it occupies more than one space you can use &lt;strong&gt;Grid.ColumSpan&lt;/strong&gt; or &lt;strong&gt;Grid.RowSpan&lt;/strong&gt;, AND WUALÁ !, you already have a harmonic interface.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Some controls will necessarily use &lt;code&gt;Auto&lt;/code&gt; since their dimensions do not have to be changed, ahem (&lt;code&gt;Label&lt;/code&gt;, &lt;code&gt;Entry&lt;/code&gt;, etc).&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt; &lt;span class="nt"&gt;&amp;lt;Grid&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;".175*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;".175*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;"Auto"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Grid.RowDefinitions&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;".075*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;".85*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;".075*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;


             &lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt;
                &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                &lt;span class="na"&gt;Grid.RowSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;
                &lt;span class="na"&gt;Aspect=&lt;/span&gt;&lt;span class="s"&gt;"AspectFill"&lt;/span&gt;
                &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"ItalianFood.png"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

             &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt;
                &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                &lt;span class="na"&gt;Grid.ColumnSpan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Hello Monettelli UIKIT"&lt;/span&gt;
                &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtHeadLine4_1}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Margin&lt;/strong&gt; and &lt;strong&gt;Padding&lt;/strong&gt; you will rarely see involved, because it generates &lt;strong&gt;"Absolute Distances"&lt;/strong&gt;, the following code is a clear example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;    &lt;span class="nt"&gt;&amp;lt;Grid&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;Grid.RowDefinitions&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;".35*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;RowDefinition&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;".65*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Grid.RowDefinitions&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;".075*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;".85*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ColumnDefinition&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;".075*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;


             &lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt;
                &lt;span class="na"&gt;Grid.Row=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                &lt;span class="na"&gt;Grid.Column=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;
                &lt;span class="na"&gt;Aspect=&lt;/span&gt;&lt;span class="s"&gt;"AspectFill"&lt;/span&gt;
                &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"ItalianFood.png"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  MonettelliUIKIT, Shell and MVVM on stage
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=DanielMonettelli.monettelli-forms-templates"&gt;MonettelliUIKIT&lt;/a&gt; implements the &lt;strong&gt;"Clean UI Style Architecture"&lt;/strong&gt;, which reduces the time of developing beautiful interfaces and maintaining them, then I explain the process step by step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TJuOvvPG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_monettelliuikit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TJuOvvPG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_monettelliuikit.png" alt="" width="750" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  a) Use of embedded Fonts and SVG's
&lt;/h3&gt;

&lt;p&gt;In my publication &lt;a href="https://danielmonettelli.github.io/posts/creating-a-clean-style-library-for-xamarin-forms/"&gt;Creating a clean Style Library for Xamarin.Forms&lt;/a&gt; I write about how to customize FontIcons and add fonts themselves, now with &lt;a href="https://devblogs.microsoft.com/xamarin/embedded-fonts-xamarin-forms/"&gt;Embedded Fonts&lt;/a&gt;, it simplifies the use of such fonts, the next versions of &lt;strong&gt;MonettelliUIKIT&lt;/strong&gt; will have this feature, considerably reducing the code and at the same time making us productive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;"Embedded Fonts" in AssemblyInfo.cs:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Xamarin.Forms&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Xamarin.Forms.Xaml&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;assembly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;XamlCompilation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;XamlCompilationOptions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Compile&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;


&lt;span class="cp"&gt;#region FontIcons Embedded
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;assembly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;ExportFont&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"monettelliuikitfonticons.ttf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Alias&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"MonettelliFontIcons"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="cp"&gt;#endregion
&lt;/span&gt;
&lt;span class="cp"&gt;#region FontFamily Embedded
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;assembly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;ExportFont&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SourceSansPro-Bold.ttf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Alias&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"SourceSansPro_Bold"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;assembly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;ExportFont&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"OpenSans-ExtraBold.ttf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Alias&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"OpenSans_ExtraBold"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;assembly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;ExportFont&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"OpenSans-Bold.ttf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Alias&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"OpenSans_Bold"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;assembly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;ExportFont&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"OpenSans-SemiBold.ttf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Alias&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"OpenSans_SemiBold"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;assembly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;ExportFont&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"OpenSans-Regular.ttf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Alias&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"OpenSans_Regular"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="cp"&gt;#endregion
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the other hand, &lt;strong&gt;SVG's are already embedded&lt;/strong&gt;, thanks to the Nuget package called &lt;a href="https://www.xamboy.com/2018/03/29/sharing-svg-icons-across-platforms-in-xamarin-forms/"&gt;Xamarin.FFImageLoading.Svg.Forms&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ffSvg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;SvgCachedImage&lt;/span&gt;
                &lt;span class="n"&gt;Grid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Row&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                &lt;span class="n"&gt;BackgroundColor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"#F5CEB8"&lt;/span&gt;
                &lt;span class="n"&gt;Source&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"resource://XF_Demo.SVGImages.svg_bg_food.svg"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  b) MVVM Pattern
&lt;/h3&gt;

&lt;p&gt;In the following image we can see the flow of the &lt;strong&gt;MVVM Pattern&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e2vZEXju--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_MVVM_Pattern.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e2vZEXju--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_MVVM_Pattern.png" alt="" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.- The &lt;strong&gt;"Models"&lt;/strong&gt; folder is part of the business logic, the models are made up of &lt;strong&gt;Full Property&lt;/strong&gt; and inherit &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt;, the other class houses the data repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Model Structure:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Exercise&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;INotifyPropertyChanged&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;Guid&lt;/span&gt; &lt;span class="n"&gt;_id_Exercise&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;_name_Exercise&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Guid&lt;/span&gt; &lt;span class="n"&gt;Id_Exercise&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_id_Exercise&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;set&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;_id_Exercise&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nf"&gt;RaisePropertyChanged&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Id_Exercise&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
         &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name_Exercise&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_name_Exercise&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;set&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;_name_Exercise&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nf"&gt;RaisePropertyChanged&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Name_Exercise&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
         &lt;span class="p"&gt;}&lt;/span&gt;


        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;event&lt;/span&gt; &lt;span class="n"&gt;PropertyChangedEventHandler&lt;/span&gt; &lt;span class="n"&gt;PropertyChanged&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;RaisePropertyChanged&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;propertyName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;PropertyChanged&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;Invoke&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PropertyChangedEventArgs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;propertyName&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Structure of the Model Repository:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExerciseRepository&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="nf"&gt;ExerciseRepository&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exercises&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Exercises&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Exercise&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Exercise&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="n"&gt;Id_Exercise&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Guid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{70822596-265D-49E3-8CCC-CD996093E601}"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                        &lt;span class="n"&gt;Name_Exercise&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Diet Recommendation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="n"&gt;Image_Exercise&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"resource://XF__EmbeddedSVG.SVGImages.svg_hamburger.svg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="n"&gt;Duration_Exercise&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"15-55 MIN Course"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="n"&gt;Description_Exercise&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Learn how to Create Your Clients(or your)perfect diet and nutrition plan based on their goals, preferences and lifestyle"&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Exercise&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Exercises&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.- The &lt;strong&gt;"Services"&lt;/strong&gt; folder has two services, a &lt;strong&gt;flexible navigation&lt;/strong&gt; class, and a &lt;strong&gt;Data Services&lt;/strong&gt; class, each inheriting its respective &lt;strong&gt;Interface&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Navigation Service:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NavigationService&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;INavigationService&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt; &lt;span class="n"&gt;MainPage&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MainPage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Type&lt;/span&gt; &lt;span class="n"&gt;pageType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pageType&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;GoBack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;MainPage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Navigation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PopAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;NavigateTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;pageKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;parameter&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TryGetValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pageKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="n"&gt;Type&lt;/span&gt; &lt;span class="n"&gt;pageType&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Activator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pageType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SetNavigationArgs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parameter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

                &lt;span class="n"&gt;MainPage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Navigation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PushAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

                &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BindingContext&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;MyBaseViewModel&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;Initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parameter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ArgumentException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"This page doesn't exist: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pageKey&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pageKey&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NavigationExtensions&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;ConditionalWeakTable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;arguments&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ConditionalWeakTable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="nf"&gt;GetNavigationArgs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;argument&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TryGetValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="n"&gt;argument&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;argument&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;SetNavigationArgs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Data Services:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExerciseDataService&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IModelDataService&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Exercise&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exercise&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;NotImplementedException&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Exercise&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetAll&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ExerciseRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Exercises&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exercise&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;NotImplementedException&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exercise&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;NotImplementedException&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3.- As a &lt;strong&gt;Singleton&lt;/strong&gt;, the &lt;strong&gt;Services&lt;/strong&gt; are managed throughout the project*&lt;strong&gt;(mainly in the ViewModels)&lt;/strong&gt;*.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Singleton in App.xaml.cs:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Application&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;ExerciseDataService&lt;/span&gt; &lt;span class="n"&gt;ExerciseDataService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ExerciseDataService&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;SessionDataService&lt;/span&gt; &lt;span class="n"&gt;SessionDataService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SessionDataService&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;NavigationService&lt;/span&gt; &lt;span class="n"&gt;NavigationService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;NavigationService&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;InitializeComponent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

            &lt;span class="n"&gt;NavigationService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ViewNames&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ExercisePage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ExercisePage&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="n"&gt;NavigationService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ViewNames&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ExerciseDetailPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ExerciseDetailPage&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

            &lt;span class="n"&gt;MainPage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;AppShell&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="c1"&gt;//MainPage = new NavigationPage(new ExercisePage());&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnStart&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnSleep&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnResume&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4.- The &lt;strong&gt;"Helpers"&lt;/strong&gt; folder, add an Enum Type called &lt;strong&gt;"ThemeType"&lt;/strong&gt;, where you have the different &lt;strong&gt;Themes&lt;/strong&gt;, the &lt;strong&gt;ThemeHelper&lt;/strong&gt; class inherits said Enum, it should be noted that its use is through the method of a command that will be created in the &lt;strong&gt;ViewModel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;ThemeType.cs:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;ThemeType&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Light&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Dark&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;ThemeHelper.cs:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ThemeHelper&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ChangeTheme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ThemeType&lt;/span&gt; &lt;span class="n"&gt;themeType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Resources&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Resources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;


            &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;themeType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;ThemeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Light&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Resources&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;LightTheme&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                    &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;ThemeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Resources&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;DarkTheme&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                    &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5.- The &lt;strong&gt;"ViewModels"&lt;/strong&gt; folder has a &lt;strong&gt;Base Class&lt;/strong&gt; for each &lt;strong&gt;ViewModel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;MyBaseViewModel.cs:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyBaseViewModel&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BaseViewModel&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;virtual&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;parameter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;ViewModel Structure:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExerciseViewModel&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MyBaseViewModel&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ThemeType&lt;/span&gt; &lt;span class="n"&gt;SelectedTheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ICommand&lt;/span&gt; &lt;span class="n"&gt;ExerciseSelectedCommand&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ICommand&lt;/span&gt; &lt;span class="n"&gt;ThemeSelectedCommand&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;ObservableRangeCollection&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Exercise&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_exercises&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ObservableRangeCollection&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Exercise&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Exercises&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_exercises&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;set&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;_exercises&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nf"&gt;OnPropertyChanged&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exercises&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;Exercise&lt;/span&gt; &lt;span class="n"&gt;_selectedExercise&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Exercise&lt;/span&gt; &lt;span class="n"&gt;SelectedExercise&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_selectedExercise&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;SetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="n"&gt;_selectedExercise&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;ExerciseViewModel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Exercises&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ObservableRangeCollection&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Exercise&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ExerciseDataService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetAll&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

            &lt;span class="n"&gt;ExerciseSelectedCommand&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OnExerciseSelectedCommand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="n"&gt;ThemeSelectedCommand&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OnThemeSelectedCommand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnThemeSelectedCommand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SelectedTheme&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;ThemeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Light&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;SelectedTheme&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ThemeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dark&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;SelectedTheme&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ThemeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Light&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="n"&gt;ThemeHelper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ChangeTheme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SelectedTheme&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnExerciseSelectedCommand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SelectedExercise&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NavigationService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NavigateTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ViewNames&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ExerciseDetailPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SelectedExercise&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

                &lt;span class="n"&gt;SelectedExercise&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;6.- The &lt;strong&gt;"Utilities"&lt;/strong&gt; folder has two classes, a &lt;strong&gt;ViewModelLocator&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;(useful for unit tests)&lt;/em&gt;&lt;/strong&gt; that facilitates the replacement of the &lt;strong&gt;ViewModel&lt;/strong&gt; in each &lt;strong&gt;View&lt;/strong&gt;, and a &lt;strong&gt;ViewNames&lt;/strong&gt; that names each &lt;strong&gt;View&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;ViewModelLocator Structure:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ViewModelLocator&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;ExerciseViewModel&lt;/span&gt; &lt;span class="n"&gt;ExerciseViewModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ExerciseViewModel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;ExerciseDetailViewModel&lt;/span&gt; &lt;span class="n"&gt;ExerciseDetailViewModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ExerciseDetailViewModel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;ViewNames.cs:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ViewNames&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;ExercisePage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"ExercisePage"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;ExerciseDetailPage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"ExerciseDetailPage"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;7.- In the &lt;strong&gt;C# code-behind file&lt;/strong&gt; of the &lt;strong&gt;View&lt;/strong&gt;, through the &lt;strong&gt;BindingContext&lt;/strong&gt; property, we link the &lt;strong&gt;ViewModelLocator&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;ViewModelLocator in the C# code-behind file:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExercisePage&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ContentPage&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;ExercisePage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;InitializeComponent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

            &lt;span class="n"&gt;BindingContext&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ViewModelLocator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ExerciseViewModel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  c) XAML Harmonic
&lt;/h3&gt;

&lt;p&gt;Now that you have a clear vision of what interface harmony is all about, let's apply what we have learned in the following design.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oczdHdeG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_exercise_app_concept.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oczdHdeG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_exercise_app_concept.png" alt="" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Making a feedback, we analyze the design(s) in Adobe XD, we add multi-colored blocks to the rows and columns, we prototype and create the link that will help to see the distances of these blocks, and then calculate the proportions of each design.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3GsmTKte--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_harmonic_proportions_in_the_concept_of_exercise_application.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3GsmTKte--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_harmonic_proportions_in_the_concept_of_exercise_application.png" alt="" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using the &lt;strong&gt;GridLayout&lt;/strong&gt;, we complement these proportions in &lt;strong&gt;Row(Colum)Definitions&lt;/strong&gt;, and with the help of the design, we position the controls, then through &lt;strong&gt;StaticResource/DynamicResource&lt;/strong&gt;, we incorporate the styles assigned in &lt;strong&gt;Styles.xaml&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Complete Structure of a Style with OnIdiom:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt; &lt;span class="nt"&gt;&amp;lt;Style&lt;/span&gt;
        &lt;span class="na"&gt;x:Key=&lt;/span&gt;&lt;span class="s"&gt;"TxtHeadLine4_1"&lt;/span&gt;
        &lt;span class="na"&gt;TargetType=&lt;/span&gt;&lt;span class="s"&gt;"Label"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Setter&lt;/span&gt; &lt;span class="na"&gt;Property=&lt;/span&gt;&lt;span class="s"&gt;"TextColor"&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"{DynamicResource colSec}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Setter&lt;/span&gt; &lt;span class="na"&gt;Property=&lt;/span&gt;&lt;span class="s"&gt;"FontSize"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;OnIdiom&lt;/span&gt;
                &lt;span class="na"&gt;x:TypeArguments=&lt;/span&gt;&lt;span class="s"&gt;"x:Double"&lt;/span&gt;
                &lt;span class="na"&gt;Watch=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSizeCap_12}"&lt;/span&gt;
                &lt;span class="na"&gt;Phone=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSizeH4_34}"&lt;/span&gt;
                &lt;span class="na"&gt;Desktop=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSizeH3_48}"&lt;/span&gt;
                &lt;span class="na"&gt;Tablet=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSizeH3_48}"&lt;/span&gt;
                &lt;span class="na"&gt;TV=&lt;/span&gt;&lt;span class="s"&gt;"{StaticResource TxtSizeH3_48}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Setter&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Setter&lt;/span&gt; &lt;span class="na"&gt;Property=&lt;/span&gt;&lt;span class="s"&gt;"FontFamily"&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"OpenSans_ExtraBold"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  d) Shell in action
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://monettelliuikit.github.io"&gt;MonettelliUIKIT&lt;/a&gt; comes with &lt;strong&gt;Shell&lt;/strong&gt;, and with &lt;strong&gt;AppShell.xaml&lt;/strong&gt; you can add &lt;strong&gt;Views&lt;/strong&gt;, easily modify colors, labels, images, etc. It practically makes life easier for the developer.&lt;/p&gt;

&lt;h3&gt;
  
  
  e) Final Score
&lt;/h3&gt;

&lt;p&gt;If you have applied each step, the result will be similar to this one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NhS70WkN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_harmony_of_interfaces_made_in_xamarin_forms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NhS70WkN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.jsdelivr.net/gh/danielmonettelli/danielmonettelli.github.io%40main/assets/img/images/4_harmony_of_interfaces_made_in_xamarin_forms.png" alt="" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;The use of harmonic proportions is one of many methods to stylize interfaces, make them flexible, and above all, provide a good user experience on each device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MonettelliUIKIT&lt;/strong&gt; is a great ally of the UI/UX in Xamarin.Forms and I hope it is also in the new &lt;strong&gt;.NET MAUI&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;




&lt;h3&gt;
  
  
  Github Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/danielmonettelli/XF_HarmonicInterfaces"&gt;danielmonettelli/XF_HarmonicInterfaces&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Sketch App Sources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.sketchappsources.com/free-source/4067-excercise-app-concept-sketch-freebie-resource.html"&gt;Exercise App Concept Sketch Resource&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>xamarin</category>
      <category>xamarinforms</category>
      <category>ux</category>
    </item>
    <item>
      <title>What’s new in Xamarin.Forms – XAML</title>
      <dc:creator>Daniel Monettelli</dc:creator>
      <pubDate>Sun, 20 Feb 2022 02:59:00 +0000</pubDate>
      <link>https://dev.to/danielmonettelli/whats-new-in-xamarinforms-xaml-1gp0</link>
      <guid>https://dev.to/danielmonettelli/whats-new-in-xamarinforms-xaml-1gp0</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;The new features of XAML help productivity and thus reduce development time in mobile applications.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Xamarin.Forms team has put the batteries in giving the developer a pleasant experience, and XAML is no exception.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/maddymontaquila"&gt;Maddy Leger&lt;/a&gt; &lt;em&gt;(Program Manager at Microsoft working on Xamarin.Forms tooling)&lt;/em&gt; in his video tutorial tells us about many new features that we can use in XAML, these are the most relevant.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/q7yl95pSjo0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick encapsulation of controls
&lt;/h2&gt;

&lt;p&gt;This improvement groups controls using the “Surround With…” option or with the “Ctrl + K, Ctrl + S” shortcut.&lt;/p&gt;




&lt;h2&gt;
  
  
  XAML Regions
&lt;/h2&gt;

&lt;p&gt;Without a doubt this characteristic fascinates me, in C # it is good practice to separate important parts, contract them or expand them is something that a simple comment does not do, with “XAML Regions” we can reorganize our code and add good practices in the process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YxuR7wVR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1364/0%2AwtNwarsUzIHqw89v.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YxuR7wVR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1364/0%2AwtNwarsUzIHqw89v.gif" alt="" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Go To Definition
&lt;/h2&gt;

&lt;p&gt;This option allows you to go directly to an object, it is great to locate styles, binding, etc, that we are using.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xKbl_z4N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1364/0%2Arkau3_OuKNiBa4np.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xKbl_z4N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1364/0%2Arkau3_OuKNiBa4np.gif" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Update: &lt;a href="https://github.com/danielmonettelli/XF_FoodApp"&gt;https://github.com/danielmonettelli/XF_FoodApp&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;As you can see, Microsoft continues to take great steps to meet the needs of the Developer of Xamarin.Forms, “productivity” is one of the goals that is taking it very seriously, I look forward to the next updates to come.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>xamarin</category>
      <category>xamarinforms</category>
      <category>xaml</category>
    </item>
    <item>
      <title>Creating a clean Style Library for Xamarin.Forms</title>
      <dc:creator>Daniel Monettelli</dc:creator>
      <pubDate>Sun, 20 Feb 2022 02:35:00 +0000</pubDate>
      <link>https://dev.to/danielmonettelli/creating-a-clean-style-library-for-xamarinforms-3cde</link>
      <guid>https://dev.to/danielmonettelli/creating-a-clean-style-library-for-xamarinforms-3cde</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;A brief introduction of how this publication originated, seeing several Xamarin.Forms projects with different ways of using styles, I said to myself, why not make a Library that is universal for any type of application?, Then I started researching Microsoft documentation, blogs, etc., and thus this great project was born.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Before explaining step by step the components that make up this Style Library, we will add two primary extensions focused on the order and readability of XAML.&lt;/p&gt;




&lt;h2&gt;
  
  
  XAML Styler
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=TeamXavalon.XAMLStyler"&gt;XAML Styler&lt;/a&gt; is an extension compatible with Visual Studio 2017 and 2019, its purpose is to organize the XAML code.&lt;/p&gt;

&lt;p&gt;Next, I show you my configuration for XAML Styler.&lt;/p&gt;

&lt;p&gt;We install the plugin, then we go to TOOLS / Options / XAML Styler and leave it just like the following images.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VFY3X9cj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/746/0%2A4fWxHFPKT1Ygn7Yh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VFY3X9cj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/746/0%2A4fWxHFPKT1Ygn7Yh.png" alt="" width="746" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G8eEc6EP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/747/0%2AGj5eOmcyIZfhF_AS.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G8eEc6EP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/747/0%2AGj5eOmcyIZfhF_AS.png" alt="" width="747" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;…to then obtain this result in our XAML code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h7_McT5p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1364/0%2AkdbsOY-nK6wVTAQ3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h7_McT5p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1364/0%2AkdbsOY-nK6wVTAQ3.gif" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Color picker
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ShemeerNS.ColorPicker"&gt;Color picker&lt;/a&gt; is another extension compatible with Visual Studio 2017 and 2019, its purpose is to highlight hexadecimal colors, RGB, etc., it is very useful to realize what type of color we use in an XAML style or control.&lt;/p&gt;

&lt;p&gt;To have it included in our Visual Studio work area we will make the following configurations:&lt;/p&gt;

&lt;p&gt;Install the extension, then go to TOOLS, click on “Color Picker”, and attach it to the right side of Visual Studio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ivYpmdN_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1364/0%2AeH1mBUzPenAZV7rw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ivYpmdN_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1364/0%2AeH1mBUzPenAZV7rw.gif" alt="" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we have these two great extensions, we will begin to understand the Style Library.&lt;/p&gt;




&lt;h2&gt;
  
  
  Styles Architecture in Xamarin.Forms
&lt;/h2&gt;

&lt;p&gt;Before talking about style architecture, we have to see what interfaces have in common, we can see that there are images, icons, texts and the spaces that separate it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GPtEx0x0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1366/0%2AOyeYyjevSRFG_fD8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GPtEx0x0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1366/0%2AOyeYyjevSRFG_fD8.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From there, this style architecture emerges, the following image shows the flow of the Style Library:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XDDzDJyd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2A3MYqNigTDY3PWI6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XDDzDJyd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2A3MYqNigTDY3PWI6c.png" alt="" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Does it seem complicated to understand ?, do not worry, then I explain step by step said Workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  1.- Font Icons
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://montemagno.com/using-font-icons-in-xamarin-forms-goodbye-images-hello-fonts/"&gt;Font Icons&lt;/a&gt; are enriched icons SVG font, exactly as you read it , let alone implement your project type icons png, jpg, etc, now you will work with sources, and how do I get Font Icons ?, there are two ways to acquire :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;On websites that offer free and paid Font Icons, a popular one is &lt;a href="https://materialdesignicons.com/"&gt;MaterialDesignIcons&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The other way is to create your own icon source, ooohhhhhhh !!!!, we will use two tools,  &lt;a href="https://www.adobe.com/la/products/xd.html"&gt; AdobeXD&lt;/a&gt; and &lt;a href="https://icomoon.io/"&gt;IconMoon&lt;/a&gt;:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In AdobeXD, batch select the icons and export it to SVG.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In IconMoon, convert them to a custom font.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;With “ &lt;a href="https://andreinitescu.github.io/IconFont2Code/"&gt;IconFontToCode&lt;/a&gt;”, you will transform the source into code, which you will use in your Xamarin.Forms project.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…then we copy the two sources to the Android and iOS projects.&lt;/p&gt;

&lt;p&gt;In the .NET Standard project, create a folder called “Styles”, and two classes called “IconFont.cs” (a nexa materialdesignicons-webfont.ttf ) and “CustomIconFont.cs” ( appendix CustomIconFont.ttf ), then copy the code generated by ”&lt;a href="https://andreinitescu.github.io/IconFont2Code/"&gt;IconFontToCode&lt;/a&gt;”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NlFD8yV9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1366/0%2AahJqjwoNjF8bYLfP.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NlFD8yV9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1366/0%2AahJqjwoNjF8bYLfP.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2.- Resource Dictionary in XAML
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1.- Texts.xaml
&lt;/h3&gt;

&lt;p&gt;This ResourceDictionary establishes the sources of the application through OnPlatform, and with their respective variants called Bold, ItalicBold, italic, etc.&lt;/p&gt;

&lt;p&gt;First we add the TTF or OTF source, &lt;a href="https://xamarinhelp.com/custom-fonts-xamarin-forms/"&gt;Adam Pedley’s post&lt;/a&gt; clearly explains how to do it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TIP:&lt;/strong&gt; The &lt;code&gt;x:key&lt;/code&gt; must start with the variant followed by the name of the font family, this helps to differentiate from other sources. Example: &lt;code&gt;BoldFont_ProductSans&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E_o0XGD5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/714/0%2AOUPDtt1mkGu8hlxp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E_o0XGD5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/714/0%2AOUPDtt1mkGu8hlxp.png" alt="" width="714" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Font size is an important issue, and thanks to &lt;a href="https://material.io/design/typography/the-type-system.html#type-scale"&gt;Material Design&lt;/a&gt; we can categorize them as shown in the left image.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TIP:&lt;/strong&gt; The &lt;code&gt;x:key&lt;/code&gt; begins with &lt;code&gt;TxtSize&lt;/code&gt; followed by the abbreviation of the &lt;code&gt;Scale Category&lt;/code&gt; and the&lt;code&gt;Size&lt;/code&gt; of this, example &lt;code&gt;TxtSizeH2_60&lt;/code&gt; &lt;em&gt;(see the full Image)&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5ZWn5_CP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1345/0%2ATCeRktvlEMDz-dED.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5ZWn5_CP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1345/0%2ATCeRktvlEMDz-dED.png" alt="" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As for the “TargetType” of the styles, we will use controls that have text, example: Button, Label, etc.&lt;/p&gt;

&lt;p&gt;The abbreviation is easy to understand, and thanks to the XAML intellisense we will create styles in record time, in the following image you can distinguish the parts that integrate a text style.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;CASE:&lt;/strong&gt; When we have two styles with similar &lt;code&gt;FontSize&lt;/code&gt; but with different &lt;code&gt;TextColor&lt;/code&gt; or &lt;code&gt;FontFamily&lt;/code&gt;, the abbreviation ends in a number that indicates the priority, this case can be seen in the image.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DjRL9L6C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1275/0%2A444xDawNvY0QN7nz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DjRL9L6C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1275/0%2A444xDawNvY0QN7nz.png" alt="" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2.- Icons.xaml
&lt;/h3&gt;

&lt;p&gt;This ResourceDictionary establishes the IconFonts through OnPlatform, its structure can be seen in the following image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fhErbcEO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2A-eopUjp788f8Qz1Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fhErbcEO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2A-eopUjp788f8Qz1Q.png" alt="" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To use the IconFonts, the labeling “FontImageSource” must be created, and since we are using Shell we must separate the resources from Tabs, Flyout and Interfaces ( views that will use these resources ).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RJz3ffZt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2AhH1VhCt-ioejIvcf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RJz3ffZt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2AhH1VhCt-ioejIvcf.png" alt="" width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Spaces.xaml
&lt;/h3&gt;

&lt;p&gt;This ResourceDictionary implements Thickness, and thanks to OnPlatform we establish the amplitude of the Layouts, following the parameters of Material Design.&lt;/p&gt;

&lt;p&gt;We regularly use GridLayout, StackLayout and Frame, therefore, the styles will be exclusive to them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; The layouts and controls mentioned have default spaces, for which, assign a group of basic styles and whose properties are of &lt;code&gt;value 0&lt;/code&gt; &lt;em&gt;(See the image "Spaces BASE")&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IzcArXmd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2AlmSWsbMqkmPHR1iw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IzcArXmd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2AlmSWsbMqkmPHR1iw.png" alt="" width="800" height="921"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3.- Themes
&lt;/h2&gt;

&lt;p&gt;This ResourceDictionary implements “Color”, a group of colors that will qualify the interfaces of Xamarin.Forms.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; The colors of the themes I classify as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Color Range&lt;/code&gt;: It is the range of colors that the interfaces will have, the range is by level of prominence.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Backgroundcolors&lt;/code&gt;: They are the background colors of an interface.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Entry Colors&lt;/code&gt;: Typical colors for the Entry control.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Border Colors&lt;/code&gt;: Border colors for controls such as Button, frame etc.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Remark Colors&lt;/code&gt;: Colors for the Button type Label control.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Surface Colors&lt;/code&gt;: Surface colors for Frames.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Shell Colors&lt;/code&gt;: Colors for Tabs and Flyout.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6owpePl_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1137/0%2AV61Z2srgr6a_MJbY.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6owpePl_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1137/0%2AV61Z2srgr6a_MJbY.png" alt="" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The help of Zeplin is very important to organize resources to the themes, only the way you use it depends, in the following gif you can see how I import colors from Zeplin to Visual Studio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q51QocaT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1364/0%2AfBJr_-ODISGuIDI_.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q51QocaT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1364/0%2AfBJr_-ODISGuIDI_.gif" alt="" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4.- General.xaml
&lt;/h2&gt;

&lt;p&gt;This ResourceDictionary merges Texts.xaml, Icons.xaml and Spaces.xaml through MergedDictionaries, thanks to &lt;a href="https://xamarinhelp.com/merged-dictionaries-xamarin-forms/"&gt;Adam Pedley&lt;/a&gt;, it is possible to separate several XAML files, and create this great style architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1ty1OcXm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1170/0%2AObjQGOrMDS08aZFB.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1ty1OcXm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1170/0%2AObjQGOrMDS08aZFB.png" alt="" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5.- App.xaml
&lt;/h2&gt;

&lt;p&gt;The XAML App class, is the nexus of the architecture of styles and the Views of Xamarin.Forms, therefore, to link them, it is necessary to add a dictionary of resources, in this case, the source is WhiteTheme.xaml.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G5WoVDec--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1077/0%2AYS5-ZJoNrJtAl_YS.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G5WoVDec--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1077/0%2AYS5-ZJoNrJtAl_YS.png" alt="" width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6.- AppShelll.xaml
&lt;/h2&gt;

&lt;p&gt;AppShell seeks to reduce the complexity of creating mobile applications by providing fundamental application architecture features. As a complete visual hierarchy, common browsing experience, URI-based routing and integrated search management &lt;strong&gt;&lt;em&gt;( David Ortinau, Principal Program Manager of Microsoft )&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--610M48lC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2APAvKvDaxoZeLKAu2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--610M48lC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2APAvKvDaxoZeLKAu2.png" alt="" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the following image we can see the structure of Shell in broad strokes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IV8ENVSO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2AXTvBPV-mUaF3W8Fq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IV8ENVSO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1400/0%2AXTvBPV-mUaF3W8Fq.png" alt="" width="800" height="1158"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7.- Views
&lt;/h2&gt;

&lt;p&gt;They are XAML files whose base class is a ContentPage, in it we can add layouts, controls, etc.&lt;/p&gt;

&lt;p&gt;Binding also plays an important role, the following image shows the MainService.cs class, whose “Image_Category” property, is a font icon, and with “ImageColor_Category”, allows the color to be different in each instance, in XAML we add a Label and we include this logic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XveepwGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1256/0%2AUXOHw-1MrRR59IGg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XveepwGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1256/0%2AUXOHw-1MrRR59IGg.png" alt="" width="800" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;… With DynamicResource it will make possible the change of Themes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tyvNGE1U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1109/0%2A4lUagof9I9LFwlv5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tyvNGE1U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1109/0%2A4lUagof9I9LFwlv5.png" alt="" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8.- Final result
&lt;/h2&gt;

&lt;p&gt;The application speaks for itself, remember that the only way to do a great job is to love what you do … &lt;strong&gt;&lt;em&gt;( Steve Jobs )&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/danielmonettelli/XF_FoodApp"&gt;https://github.com/danielmonettelli/XF_FoodApp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O-ZqTREy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1366/0%2ALwttuqqoZN9qun2s.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O-ZqTREy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://miro.medium.com/max/1366/0%2ALwttuqqoZN9qun2s.gif" alt="" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;As one learns, one realizes that order is very important in every way, and in programming with greater reason, that is why I take the time to create such a publication, this Xamarin Styles Architecture.Forms will serve to To ignore common properties that we use, it is feasible for Shell, easy implementation of colors to Themes thanks to Zeplin, use of Font Icons to improve the performance of the application, clean management of resources in each interface of the application, etc.&lt;/p&gt;

&lt;p&gt;I hope it helps, any questions you have regarding the Architecture of Styles write to me and I will gladly answer all your questions.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>xamarin</category>
      <category>xamarinforms</category>
      <category>ux</category>
    </item>
  </channel>
</rss>
