SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
Mario López
Daniel Cardeña
Xamarin.Forms y
MVVM
Mobile Technical leader
@mariolobar
/mariolobar
mlopez@bravent.net
Mobile Senior developer
@DanielCarde
/daniel-cardeña-pulido
dcardenap@bravent.net
Material
Puedes ver y descargar todo el material del curso aquí:
github.com/BraventIT/XamFormsMVVMExample
github.com/BraventIT/XamFormsTVSeriesCompleto
github.com/BraventIT/XamFormsTVSeriesIncompleto
Material
Agenda
1.
2.
3.
4.
5.
6.
7.
Agenda
1.
2.
3.
4.
5.
6.
7.
8.
¿Qué es un patrón MVVM?
MVVM es una evolución del patrón MVC (Model/View/Controller) que intenta facilitar el
trabajo en paralelo entre alguien encargado en diseñar la interfaz de usuario y otra persona
encargada de generar el código que la sustentará. Esta separación de capas facilita en gran
medida el desarrollo de una app.
Partes del patrón
View: Se trata de la
interfaz de usuario de
nuestra app
ViewModel: Contiene la lógica
de presentación de nuestra
aplicación. Es el intermediario
entre la Vista y el Modelo.
El Model será el encargado
del acceso a datos y la
lógica de negocio.
Patrón MVVM
MODEL
Business Logic and
Data
VIEW
MODEL
Presentation Logic
VIEW
Presentation
Processed Data
Data Changed
Command and
Data Binding
MVVM MODEL VIEW VIEWMODEL
¿Por qué MVVM?
Mayor facilidad para mantener,
extender y compartir el código
Más facilidad de colaborar
Testing
Más fácil de diseñar
Binding
El binding relaciona dos propiedades entre sí haciendo que se mantengan sincronizadas:
si una cambia la otra también.
Data Binding: INotifyPropertyChanged
using System;
namespace System.ComponentModel
{
public interface INotifyPropertyChanged
{
event PropertyChangedEventHandler PropertyChanged;
}
}
Propiedad de un ViewModel
public class ViewModelBase : INotifyPropertyChanged
{
public ViewModelBase () { }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName) {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private string _Title;
public string Title
{
get { return _Title; }
set { _Title = value; OnPropertyChanged ("Title"); }
}
}
BindingUNIDIRECCIONAL
ViewModel
Property
VIEW
Property Target Control
ONE-WAY
BIDIRECCIONAL
ViewModel
VIEW
Property Target Control
TWO-WAY
Property
One-Way / Two Way Bindings
One-Way Binding Two-Way Binding
// Código en nuestro ViewModel
private string _Title;
public string Title
{
get { return _Title; }
set {
_Title = value;
RaisePropertyChanged();
}
}
// Binding en nuestro archivo XAML
<Entry Text="{Binding Title}" />
// Código en nuestro ViewModel
private string _Title;
public string Title
{
get { return _Title; }
set {
_Title = value;
RaisePropertyChanged();
}
}
// Binding en nuestro archivo XAML
<Entry Text="{Binding Title, Mode=TwoWay}" />
Command: ICommand interface
public interface ICommand
{
void Execute(object arg);
bool CanExecute(object arg)
event EventHandler CanExecuteChanged;
}
Command: Implementación ICommand
// Definición de un Command en nuestro ViewModel
private ICommand _SearchByName;
public ICommand SearchByNameCommand
{
get {
return _SearchByName ?? (_SearchByName = new Command (
async () => await ExecuteSearchByNameCommand (),
CanExecuteSearchByNameCommand));
}
}
private async Task ExecuteSearchByNameCommand () { await LoadData (SearchText); }
private bool CanExecuteSearchByNameCommand() { return SearchText.Lenght > 0; }
// Command binding en nuestro archivo XAML
<SearchBar Text="{Binding SearchText}"
SearchCommand="{Binding SearchByNameCommand}"></SearchBar>
Controles Xamarin.Forms que soportan Commands
Button MenuItem ToolBarItem
SearchBar TextCell ImageCell
ListView TapGestureRecognizer
Resumen MVVM
VIEW VIEW
MODEL MODEL
Binding
Command
Exposes
¿Por qué Xamarin?
Compartir código
entre plataformas (PLC)
Usa un solo lenguaje
de programación C#
Producto soportado y
oficial de Microsoft
Reduce el número de
bugs, reduce tiempos y
costes y reduce el “Time
to market”
Una sola base de
código para las tres
plataformas mayoritarias,
haciendo más sencillo el
desarrollo y el posterior
mantenimiento.
Compartimos entre
un 75% y un 90% del
código, dependiendo
del caso particular de
cada aplicación
</>
Genera aplicaciones
totalmente nativas, el
rendimiento y la usabilidad
es igual al de una aplicación
para cada plataforma.
Xamarin Forms permite
compartir la interfaz de
usuario, pero manteniendo
los controles nativos.
Xamarin.Forms
Xamarin Forms es un conjunto
de herramientas creadas
para agilizar el desarrollo
multiplataforma maximizando la
cantidad de código compartido
entre plataformas.
Xamarin.Forms
Xamarin.Forms - UI compartido
Lógica de aplicación compartida (ViewModels)
Servicios comunes
Vistas
XAML
MVVM
C#
Acceso a datos online (Servicios) offline (SQLite, almacenamiento)
Platform specific Platform specific Platform specific
Estructura de un proyecto con Xamarin.forms
• Un proyecto Core, que incluye la lógica de negocio y también las
Vistas de las app.
• Un proyecto para cada plataforma.
• Un proyecto de UITest.
Aunque la mayoría del código es compartido, van a existir situaciones en las que tendremos
que implementar cierta funcionalidad.
DependencyService
DependencyService
• Service Locator proporcionado por Xamarin Forms llamado DependencyService.
• La idea es definir una interfaz en Core
• Y la implementación de la misma en cada plataforma.
using System;
namespace XamFormsTVSeries.Services
{
public interface IOpenWebService
{
void OpenUrl(string url);
}
}
DependencyService
Implementación interfaz en Android Implementación interfaz en iOS
[assembly: Xamarin.Forms.Dependency (typeof (OpenWebService))]
namespace XamFormsTVSeries.iOS.Services
{
public class OpenWebService : IOpenWebService
{
public OpenWebService ()
{
}
#region IOpenWebService implementation
public void OpenUrl (string url)
{
UIApplication.SharedApplication.OpenUrl(new NSUrl(url));
}
#endregion
}
}
[assembly: Xamarin.Forms.Dependency (typeof (OpenWebService))]
namespace XamFormsTVSeries.Droid.Services
{
public class OpenWebService : IOpenWebService
{
#region IOpenWebService implementation
public void OpenUrl (string url)
{
var uri = Android.Net.Uri.Parse (url);
var intent = new Intent (Intent.ActionView, uri);
intent.SetFlags (ActivityFlags.NewTask);
Application.Context.StartActivity (intent);
}
#endregion
}
}
Converters
• Muchas veces el valor que recibimos de nuestro ViewModel no es suficiente para nuestra Vista y necesita
de un tratamiento adicional.
• Se tratan de clases auxiliares que complementan los Bindings.
• Estas clases deben de implementar la interfaz IValueConverter.
Converters: Implementación IValueConverter
public class DescriptionToImageValueConverter : IValueConverter
{
public DescriptionToImageValueConverter() {}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string strValue = value?.ToString();
if (string.IsNullOrEmpty(strValue))
{
return ImageSource.FromFile("wrong");
}
else
{
return ImageSource.FromFile("ok");
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
Converters: Binding
<Image Source="{Binding Description,
Converter={StaticResource okWrongConverter}}"></Image>
<ContentView.Resources>
<ResourceDictionary>
<local:DescriptionToImageValueConverter x:Key="okWrongConverter">
</local:DescriptionToImageValueConverter>
</ResourceDictionary>
</ContentView.Resources>
Custom Renderers
• Muchas veces los componentes base que nos ofrece Xamarin Forms no coinciden con nuestros diseños,
simplemente queremos dar un aspecto diferente a nuestra app, para ello devemos crear
CustomRenderers.
• Crearemos un control en el Core
• Implementaremos en “renderizado” en cada plataforma
Namespace XamFormsTVSeries.Controls
{
public class ImageCircle : Image
{
}
}
Implementación interfaz en Android Implementación interfaz en iOS
<ContentPage
... xmlns:local="clr-namespace:XamFormsTVSeries.Controls; assembly=XamFormsTVSeries ">
<ContentPage.Content>
<local:ImageCircle Source="{Binding Description, Converter={StaticResource
okWrongConverter}}"/>
</ContentPage.Content>
</ContentPage>
FreshMVVM
MvvmCross
MvvmLight
ReactiveUI
Nuestro framework Bravent LiteMVVMForms
Próximos
webinars
30 / 10 / 2018 de 17:00 a 19:00
Chatbots en el customer service
07 / 11 / 2018 de 17:00 a 19:00
La seguridad para los datos de tu
empresa con Azure
28 / 11 / 2018 de 17:00 a 19:00
De la teoría a la práctica con
Microsoft Face API

Contenu connexe

Tendances

Creando controles para Xamarin.Forms
Creando controles para Xamarin.FormsCreando controles para Xamarin.Forms
Creando controles para Xamarin.FormsJavier Suárez Ruiz
 
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8Sorey García
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
 
DotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.FormsDotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.FormsJavier Suárez Ruiz
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Rodolfo Finochietti
 
Aprender a programar aplicaciones moviles
Aprender a programar aplicaciones movilesAprender a programar aplicaciones moviles
Aprender a programar aplicaciones movilesRobert Moreira
 

Tendances (10)

Creando controles para Xamarin.Forms
Creando controles para Xamarin.FormsCreando controles para Xamarin.Forms
Creando controles para Xamarin.Forms
 
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
Creación de plugins con Grails
Creación de plugins con GrailsCreación de plugins con Grails
Creación de plugins con Grails
 
Semana 7 Servicios Web API Rest con Mongodb 2
Semana 7   Servicios Web API Rest con Mongodb 2Semana 7   Servicios Web API Rest con Mongodb 2
Semana 7 Servicios Web API Rest con Mongodb 2
 
DotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.FormsDotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.Forms
 
Asp.net
Asp.netAsp.net
Asp.net
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
 
Novedades Xamarin.Forms 2
Novedades Xamarin.Forms 2Novedades Xamarin.Forms 2
Novedades Xamarin.Forms 2
 
Aprender a programar aplicaciones moviles
Aprender a programar aplicaciones movilesAprender a programar aplicaciones moviles
Aprender a programar aplicaciones moviles
 

Similaire à Xamarin Forms y MVVM

Semana 02 Aplicacion Movil.pptx
Semana 02 Aplicacion Movil.pptxSemana 02 Aplicacion Movil.pptx
Semana 02 Aplicacion Movil.pptxErickCarlos14
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"Alberto Ruibal
 
GUIA DE LABORATORIO PHONE GAP JQUERY MOBILE CARGADO DE_DATOS_DE_REGISTROS...
GUIA DE  LABORATORIO  PHONE GAP JQUERY  MOBILE  CARGADO DE_DATOS_DE_REGISTROS...GUIA DE  LABORATORIO  PHONE GAP JQUERY  MOBILE  CARGADO DE_DATOS_DE_REGISTROS...
GUIA DE LABORATORIO PHONE GAP JQUERY MOBILE CARGADO DE_DATOS_DE_REGISTROS...Ivan Petrlik
 
Introducción a Zend Framework
Introducción a Zend FrameworkIntroducción a Zend Framework
Introducción a Zend FrameworkIrontec
 
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...leofishman
 
UDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesUDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesAnder Martinez
 
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverPrueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverDavid Gómez García
 
Extendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom RendersExtendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom RendersJavier Suárez Ruiz
 
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAbimael Desales López
 

Similaire à Xamarin Forms y MVVM (20)

DotNetDom: El futuro de Xamarin
DotNetDom: El futuro de XamarinDotNetDom: El futuro de Xamarin
DotNetDom: El futuro de Xamarin
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Jordan solis (1)
Jordan solis (1)Jordan solis (1)
Jordan solis (1)
 
Taller de Grails
Taller de GrailsTaller de Grails
Taller de Grails
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Extendiendo Xamarin.Forms
Extendiendo Xamarin.FormsExtendiendo Xamarin.Forms
Extendiendo Xamarin.Forms
 
Semana 02 Aplicacion Movil.pptx
Semana 02 Aplicacion Movil.pptxSemana 02 Aplicacion Movil.pptx
Semana 02 Aplicacion Movil.pptx
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"
 
GUIA DE LABORATORIO PHONE GAP JQUERY MOBILE CARGADO DE_DATOS_DE_REGISTROS...
GUIA DE  LABORATORIO  PHONE GAP JQUERY  MOBILE  CARGADO DE_DATOS_DE_REGISTROS...GUIA DE  LABORATORIO  PHONE GAP JQUERY  MOBILE  CARGADO DE_DATOS_DE_REGISTROS...
GUIA DE LABORATORIO PHONE GAP JQUERY MOBILE CARGADO DE_DATOS_DE_REGISTROS...
 
Ejemplosencillocon rmi
Ejemplosencillocon rmiEjemplosencillocon rmi
Ejemplosencillocon rmi
 
Introducción a Zend Framework
Introducción a Zend FrameworkIntroducción a Zend Framework
Introducción a Zend Framework
 
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
 
UDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesUDA-Guia desarrollo web services
UDA-Guia desarrollo web services
 
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverPrueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
Extendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom RendersExtendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom Renders
 
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDB
 

Xamarin Forms y MVVM

  • 4. Material Puedes ver y descargar todo el material del curso aquí: github.com/BraventIT/XamFormsMVVMExample github.com/BraventIT/XamFormsTVSeriesCompleto github.com/BraventIT/XamFormsTVSeriesIncompleto
  • 8.
  • 9. ¿Qué es un patrón MVVM? MVVM es una evolución del patrón MVC (Model/View/Controller) que intenta facilitar el trabajo en paralelo entre alguien encargado en diseñar la interfaz de usuario y otra persona encargada de generar el código que la sustentará. Esta separación de capas facilita en gran medida el desarrollo de una app.
  • 10. Partes del patrón View: Se trata de la interfaz de usuario de nuestra app ViewModel: Contiene la lógica de presentación de nuestra aplicación. Es el intermediario entre la Vista y el Modelo. El Model será el encargado del acceso a datos y la lógica de negocio.
  • 11. Patrón MVVM MODEL Business Logic and Data VIEW MODEL Presentation Logic VIEW Presentation Processed Data Data Changed Command and Data Binding MVVM MODEL VIEW VIEWMODEL
  • 12. ¿Por qué MVVM? Mayor facilidad para mantener, extender y compartir el código Más facilidad de colaborar Testing Más fácil de diseñar
  • 13. Binding El binding relaciona dos propiedades entre sí haciendo que se mantengan sincronizadas: si una cambia la otra también.
  • 14. Data Binding: INotifyPropertyChanged using System; namespace System.ComponentModel { public interface INotifyPropertyChanged { event PropertyChangedEventHandler PropertyChanged; } }
  • 15. Propiedad de un ViewModel public class ViewModelBase : INotifyPropertyChanged { public ViewModelBase () { } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } private string _Title; public string Title { get { return _Title; } set { _Title = value; OnPropertyChanged ("Title"); } } }
  • 17. One-Way / Two Way Bindings One-Way Binding Two-Way Binding // Código en nuestro ViewModel private string _Title; public string Title { get { return _Title; } set { _Title = value; RaisePropertyChanged(); } } // Binding en nuestro archivo XAML <Entry Text="{Binding Title}" /> // Código en nuestro ViewModel private string _Title; public string Title { get { return _Title; } set { _Title = value; RaisePropertyChanged(); } } // Binding en nuestro archivo XAML <Entry Text="{Binding Title, Mode=TwoWay}" />
  • 18.
  • 19. Command: ICommand interface public interface ICommand { void Execute(object arg); bool CanExecute(object arg) event EventHandler CanExecuteChanged; }
  • 20. Command: Implementación ICommand // Definición de un Command en nuestro ViewModel private ICommand _SearchByName; public ICommand SearchByNameCommand { get { return _SearchByName ?? (_SearchByName = new Command ( async () => await ExecuteSearchByNameCommand (), CanExecuteSearchByNameCommand)); } } private async Task ExecuteSearchByNameCommand () { await LoadData (SearchText); } private bool CanExecuteSearchByNameCommand() { return SearchText.Lenght > 0; } // Command binding en nuestro archivo XAML <SearchBar Text="{Binding SearchText}" SearchCommand="{Binding SearchByNameCommand}"></SearchBar>
  • 21. Controles Xamarin.Forms que soportan Commands Button MenuItem ToolBarItem SearchBar TextCell ImageCell ListView TapGestureRecognizer
  • 22. Resumen MVVM VIEW VIEW MODEL MODEL Binding Command Exposes
  • 23.
  • 24.
  • 25. ¿Por qué Xamarin? Compartir código entre plataformas (PLC) Usa un solo lenguaje de programación C# Producto soportado y oficial de Microsoft Reduce el número de bugs, reduce tiempos y costes y reduce el “Time to market”
  • 26. Una sola base de código para las tres plataformas mayoritarias, haciendo más sencillo el desarrollo y el posterior mantenimiento.
  • 27. Compartimos entre un 75% y un 90% del código, dependiendo del caso particular de cada aplicación </>
  • 28. Genera aplicaciones totalmente nativas, el rendimiento y la usabilidad es igual al de una aplicación para cada plataforma.
  • 29. Xamarin Forms permite compartir la interfaz de usuario, pero manteniendo los controles nativos.
  • 30. Xamarin.Forms Xamarin Forms es un conjunto de herramientas creadas para agilizar el desarrollo multiplataforma maximizando la cantidad de código compartido entre plataformas.
  • 31. Xamarin.Forms Xamarin.Forms - UI compartido Lógica de aplicación compartida (ViewModels) Servicios comunes Vistas XAML MVVM C# Acceso a datos online (Servicios) offline (SQLite, almacenamiento) Platform specific Platform specific Platform specific
  • 32. Estructura de un proyecto con Xamarin.forms • Un proyecto Core, que incluye la lógica de negocio y también las Vistas de las app. • Un proyecto para cada plataforma. • Un proyecto de UITest.
  • 33. Aunque la mayoría del código es compartido, van a existir situaciones en las que tendremos que implementar cierta funcionalidad. DependencyService
  • 34. DependencyService • Service Locator proporcionado por Xamarin Forms llamado DependencyService. • La idea es definir una interfaz en Core • Y la implementación de la misma en cada plataforma. using System; namespace XamFormsTVSeries.Services { public interface IOpenWebService { void OpenUrl(string url); } }
  • 35. DependencyService Implementación interfaz en Android Implementación interfaz en iOS [assembly: Xamarin.Forms.Dependency (typeof (OpenWebService))] namespace XamFormsTVSeries.iOS.Services { public class OpenWebService : IOpenWebService { public OpenWebService () { } #region IOpenWebService implementation public void OpenUrl (string url) { UIApplication.SharedApplication.OpenUrl(new NSUrl(url)); } #endregion } } [assembly: Xamarin.Forms.Dependency (typeof (OpenWebService))] namespace XamFormsTVSeries.Droid.Services { public class OpenWebService : IOpenWebService { #region IOpenWebService implementation public void OpenUrl (string url) { var uri = Android.Net.Uri.Parse (url); var intent = new Intent (Intent.ActionView, uri); intent.SetFlags (ActivityFlags.NewTask); Application.Context.StartActivity (intent); } #endregion } }
  • 36. Converters • Muchas veces el valor que recibimos de nuestro ViewModel no es suficiente para nuestra Vista y necesita de un tratamiento adicional. • Se tratan de clases auxiliares que complementan los Bindings. • Estas clases deben de implementar la interfaz IValueConverter.
  • 37. Converters: Implementación IValueConverter public class DescriptionToImageValueConverter : IValueConverter { public DescriptionToImageValueConverter() {} public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string strValue = value?.ToString(); if (string.IsNullOrEmpty(strValue)) { return ImageSource.FromFile("wrong"); } else { return ImageSource.FromFile("ok"); } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return null; } }
  • 38. Converters: Binding <Image Source="{Binding Description, Converter={StaticResource okWrongConverter}}"></Image> <ContentView.Resources> <ResourceDictionary> <local:DescriptionToImageValueConverter x:Key="okWrongConverter"> </local:DescriptionToImageValueConverter> </ResourceDictionary> </ContentView.Resources>
  • 39. Custom Renderers • Muchas veces los componentes base que nos ofrece Xamarin Forms no coinciden con nuestros diseños, simplemente queremos dar un aspecto diferente a nuestra app, para ello devemos crear CustomRenderers. • Crearemos un control en el Core • Implementaremos en “renderizado” en cada plataforma Namespace XamFormsTVSeries.Controls { public class ImageCircle : Image { } }
  • 40. Implementación interfaz en Android Implementación interfaz en iOS
  • 41. <ContentPage ... xmlns:local="clr-namespace:XamFormsTVSeries.Controls; assembly=XamFormsTVSeries "> <ContentPage.Content> <local:ImageCircle Source="{Binding Description, Converter={StaticResource okWrongConverter}}"/> </ContentPage.Content> </ContentPage>
  • 42.
  • 44.
  • 45. Próximos webinars 30 / 10 / 2018 de 17:00 a 19:00 Chatbots en el customer service 07 / 11 / 2018 de 17:00 a 19:00 La seguridad para los datos de tu empresa con Azure 28 / 11 / 2018 de 17:00 a 19:00 De la teoría a la práctica con Microsoft Face API