SlideShare ist ein Scribd-Unternehmen logo
1 von 65
Downloaden Sie, um offline zu lesen
Windows Phone 8 App

Windows 8 App
Windows Phone 8 App

Windows 8 App

XAML UI
Framework

.NET Code
(C#; VB.NET)

Windows Runtime
APIs

DirectX 11

Native Interop
Component

Windows Runtime
APIs

Partner Runtimes & Game Engines

IE10 Web Browser Control

Partner Runtime Engines
 Separar lógica de interfaz de usuario y la aplicación utilizando el

patrón de MVVM
 Compartir funcionalidad utilizando bibliotecas de clases de portables
 Compartir código con Archivos Enlazados
 Manejo de las diferencias de plataforma de Windows Phone y
Windows 8
 Compartir utilizando componentes Windows Runtime
1. Un origen
2. Un proyecto
3. Un ensamblado
Multiples plataformas





Plataforma

Pueden crear

Pueden consumir

Windows Phone 8

C++

C++, C#, VB

Windows 8

C++, C#, VB

C++, C#, VB, Javascript
User Interface

App Logic

General

Model-View-ViewModel (MVVM)
View
Data Bindings

Interfaz de Usuario

Commands

One way
One time
Two way

ViewModel

Estructuras que
representan los contextos
de datos de las pantallas y
el que permiten el acceso
a la logica de negocio

Model

Clases con solo
propiedades que
representan las fuentes de
los datos (archivos,
servicios, bases de datos)
Aplicaciones XAML

Este es el escenario “típico” de un
desarrollador .NET hasta antes de
XAML o MVC”

Etiqueta
Caja de texto

Aplicaciones de escritorio, web forms

Etiqueta
Caja de texto

MainPage.xaml
(Lenguaje declarativo XAML)
Form.cs (Code behind C#)
Form.designer.cs (C#)

Clase
Form

MainPage.xaml.cs (Code behind C#)

Clase
MainPage
Usando XAML se pueden crear de forma declarativa los mismos
elementos gráficos que se crearían en código
<StackPanel>
<TextBox/>
<Button/>
</StackPanel>

StackPanel stackPanel = new StackPanel();
TextBox textBox = new TextBox();
stackPanel.Children.Add(textBox);
Button button = new Button();
stackPanel.Children.Add(button);
Ambos escenarios permiten acceder a los controles de la pantalla como
miembros de la clase que los contiene es decir
this.txtMensaje.Text = “Hola”;

Y crear event handlers para poner el código relacionado a una interacción del
usuario, por ejemplo el click de un botón
private void Button_Click(object sender, RoutedEventArgs e)
{ //Code }

Ahora bien, el que esto se permita no significa que sea la práctica “sugerida”.
View (XAML y Code behind)
Data Bindings

Commands

ViewModel

Model

Trabajar con MVVM es una de las
estrategias cross platform cuyo primer
paso es entender en que parte se ubica
nuestro “anterior” esquema de trabajo.

Como podemos observar, trabajar de la
forma típica no es más que trabajar sobre
las vistas. ¿Funciona? Si, pero no es la
practica correcta.
Algunos desarrolladores alcanzan a llegar
hasta implementar Vistas Modelos como
contextos de datos, sin embargo los
manipulan desde el code behind, lo que
es inapropiado.
Editar perfil
Nombre

Apellido
<StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1" >
<TextBlock TextWrapping="Wrap" Text="TextBlock"/>

<TextBox Height="72" TextWrapping="Wrap" Text="TextBox"/>
<TextBlock TextWrapping="Wrap" Text="TextBlock"/>
<TextBox Height="72" TextWrapping="Wrap" Text="TextBox"/>

<Button Content="Button"/>
</StackPanel>
<StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1" DataContext="{Binding
Persona}" >
<TextBlock TextWrapping="Wrap" Text="TextBlock"/>
<TextBox Height="72" TextWrapping="Wrap" Text="{Binding Nombre, Mode=TwoWay}"/>

<TextBlock TextWrapping="Wrap" Text="TextBlock"/>
<TextBox Height="72" TextWrapping="Wrap" Text="{Binding Apellido, Mode=TwoWay}"/>

<Button Content="Button"/>
</StackPanel>
<Grid x:Name="LayoutRoot" Background="Transparent"

d:DataContext="{Binding Source={StaticResource SampleDataSource}}">
<StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1“
DataContext="{Binding Persona}" >
</StackPanel>
</Grid>
class Class Model

MainView Model
+
+

SelectedTask :TaskViewModel
TasksByCategory :ObservableCollection<CategoryViewModel>

TaskView Model

CategoryView Model
+
+
+

Identifier :int
Name :string
Tasks :ObservableCollection<TaskViewModel>

+
+
+
+
+

Identifier :int
Name :string
PlannedDate :DateTime
Pomori :int
Status :TaskStatus

+
+

Delete() :void
Save() :void
Fuente: http://www.slideshare.net/soreygarcia/planificando-las-bases-de-una-aplicacin-windows-phone
ADD/MODIFY
TASK

SPLASH

TASK S LIST

SETTINGS

PRODUCTIVITY REPORT

ABOUT
class Class Model

MainView Model
«binding»

«binding»

Task's List
«boundary»

CategoryView Model

TaskView Model

Add/Modify Task
«boundary»

Fuente: http://www.slideshare.net/soreygarcia/planificando-las-bases-de-una-aplicacin-windows-phone
public class ItemViewModel : INotifyPropertyChanged
{
private string lineOne;
public string LineOne
{
get { return lineOne; }
set {
if (value != lineOne)
{
lineOne = value;
NotifyPropertyChanged("LineOne");
}
}
}

public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
if (null != PropertyChanged)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public class MainViewModel : BindableBase
{
private String nombre;
public String Nombre
{
get
{
return this.nombre;

}
set

{
Set<String>(ref nombre, value);

}
}
private static HueClientViewModel hueClientVM = null;
public static HueClientViewModel HueClientVM
{
get{
if (hueClientVM == null)
hueClientVM = new HueClientViewModel();
return hueClientVM;
}
}

public HueClientView()
{
InitializeComponent();
this.DataContext = App.HueClientVM;
}
<Application x:Class="Hue_Demo_Phone.App“ ...
xmlns:vm="clr-namespace:Hue_Demo_Phone.ViewModels">
<Application.Resources>
<vm:HueClientViewModel x:Key="HueClientVM" />
</Application.Resources>

<phone:PhoneApplicationPage ...
"DataContext="{StaticResource HueClientVM}">
MVVM Simple
Event
Handlers

Events
Commanding
<StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1" DataContext="{Binding
Persona}" >
<TextBlock TextWrapping="Wrap" Text="TextBlock"/>
<TextBox Height="72" TextWrapping="Wrap" Text="{Binding Nombre, Mode=TwoWay}"/>
<TextBlock TextWrapping="Wrap" Text="TextBlock"/>

<TextBox Height="72" TextWrapping="Wrap" Text="{Binding Apellido, Mode=TwoWay}"/>

<Button Content="Button" Command="{Binding GuardarPerfilCommand}"/>
</StackPanel>
<Button Content="Press this" Height="72" Margin="90,464,0,0" Name="button1" Width="300"
Command="{Binding HelloCommand}"/>

<ListBox Height="100" x:Name="listBox1" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectionChanged}"
CommandParameter="{Binding ElementName=listBox1, Path=SelectedIndex}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
public interface ICommand
{
void Execute(object parameter);
bool CanExecute(object parameter);
event EventHandler CanExecuteChanged;
}

public class HelloWorldCommand : ICommand
{
public void Execute(object parameter)
{
Debug.WriteLine("Hello, world");
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
}

new HelloWorldCommand().Execute(null);
public MainViewModel()
{
this.guardarPerfilCommand = new RelayCommand(GuardarPerfil, null);

}
#region GuardarPerfil

private ICommand guardarPerfilCommand;
public ICommand GuardarPerfilCommand

{
get { return this.guardarPerfilCommand; }

}
private async void GuardarPerfil()

{
//Code

}
#endregion GuardarPerfil


Navigation Service



Network Service



LocalDatabaseService



SocialService



SettingsService



RoamingService



SecurityService
MVVM Intermedio
public class MainViewModel
{
private DataService dataSvc;
public MainViewModel()
{
dataSvc= new DataService();
}

public void XYZmethod()
{
var theCar = dataSvc.Car;
...
NavigationService.Instance.GoBack();
}
...
}
NavigationService INavigationService

NavigateTo Uri
Application

PhoneApplicationFrame

Application

PhoneApplicationFrame
public class MainViewModel
{
private IDataService dataSvc;
private INavigationService navSvc;

public MainViewModel(IDataService data,
INavigationService nav)
{
dataSvc= data;
navSvc = nav;
}
public void XYZmethod()
{
var theCar = dataSvc.Car;
...
navSvc.GoBack();
}
...

}
<phone:PhoneApplicationPage>
<!-- XAML -->
<phone:PhoneApplicationPage.DataContext>
<Binding Path="Main" Source="{StaticResource Locator}"/>
</phone:PhoneApplicationPage.DataContext>
<Grid x:Name="LayoutRoot" Background="Transparent" >
<StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1“
DataContext="{Binding Persona}" >
</StackPanel>
</Grid>
public class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); // Using SimpleIOC
// Register Services
if (ViewModelBase.IsInDesignModeStatic)
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
else
SimpleIoc.Default.Register<IDataService, DataService>();

SimpleIoc.Default.Register<INavigationService, NavigationService>();
// Register ViewModels
SimpleIoc.Default.Register<MainViewModel>();
}
// Following property returns an instance of MainViewModel, with dependencies injected
public MainViewModel Main
{
get { return ServiceLocator.Current.GetInstance<MainViewModel>(); }
}
}
 Repository Pattern
 Messenger Pattern
 EventToCommand
MVVM Avanzado




http://aka.ms/ShareCode
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8

Weitere ähnliche Inhalte

Was ist angesagt?

Microsoft Asp. Net [Asp.Net - Parte 2]
Microsoft Asp. Net [Asp.Net - Parte 2]Microsoft Asp. Net [Asp.Net - Parte 2]
Microsoft Asp. Net [Asp.Net - Parte 2]
Antonio Torres
 
Windows Phone 8 en Campus Party
Windows Phone 8 en Campus PartyWindows Phone 8 en Campus Party
Windows Phone 8 en Campus Party
Sorey García
 

Was ist angesagt? (20)

5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web
 
Com521
Com521Com521
Com521
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NET
 
Reglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows VistaReglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows Vista
 
Intro a ASP.NET
Intro a ASP.NETIntro a ASP.NET
Intro a ASP.NET
 
Dce2 ejercicios asp.net
Dce2 ejercicios asp.netDce2 ejercicios asp.net
Dce2 ejercicios asp.net
 
MVC
MVCMVC
MVC
 
Programacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NETProgramacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NET
 
Asp.net 4
Asp.net 4Asp.net 4
Asp.net 4
 
Ejercicio basico en asp.net LOZADA ERICK
Ejercicio basico en asp.net LOZADA ERICKEjercicio basico en asp.net LOZADA ERICK
Ejercicio basico en asp.net LOZADA ERICK
 
Asp.net
Asp.netAsp.net
Asp.net
 
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
 
Asp.net
Asp.netAsp.net
Asp.net
 
JAVA EE5
JAVA EE5JAVA EE5
JAVA EE5
 
Introducción ASP .NET
Introducción ASP .NET Introducción ASP .NET
Introducción ASP .NET
 
Microsoft Asp. Net [Asp.Net - Parte 2]
Microsoft Asp. Net [Asp.Net - Parte 2]Microsoft Asp. Net [Asp.Net - Parte 2]
Microsoft Asp. Net [Asp.Net - Parte 2]
 
Windows Phone 8 en Campus Party
Windows Phone 8 en Campus PartyWindows Phone 8 en Campus Party
Windows Phone 8 en Campus Party
 
Un Vistazo A Windows Presentation Foundation
Un Vistazo A Windows Presentation FoundationUn Vistazo A Windows Presentation Foundation
Un Vistazo A Windows Presentation Foundation
 
3-Unidad 1: Arquitectura de Diseño-1.2 Controlador-Introducción
3-Unidad 1: Arquitectura de Diseño-1.2 Controlador-Introducción3-Unidad 1: Arquitectura de Diseño-1.2 Controlador-Introducción
3-Unidad 1: Arquitectura de Diseño-1.2 Controlador-Introducción
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 

Ähnlich wie Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8

Modelo vistacontrolador
Modelo vistacontroladorModelo vistacontrolador
Modelo vistacontrolador
René Pilataxi
 
Modelo vistacontrolador
Modelo vistacontroladorModelo vistacontrolador
Modelo vistacontrolador
René Pilataxi
 
MODELO VISTA CONTROLADOR
MODELO VISTA CONTROLADORMODELO VISTA CONTROLADOR
MODELO VISTA CONTROLADOR
René Pilataxi
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
Antonio Palomares Sender
 

Ähnlich wie Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8 (20)

NET MAUI Terasoft.pptx
NET MAUI Terasoft.pptxNET MAUI Terasoft.pptx
NET MAUI Terasoft.pptx
 
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
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Xamarin Forms y MVVM
Xamarin Forms y MVVMXamarin Forms y MVVM
Xamarin Forms y MVVM
 
Presentacion node
Presentacion nodePresentacion node
Presentacion node
 
Javascript y Jquery.pptx
Javascript y Jquery.pptxJavascript y Jquery.pptx
Javascript y Jquery.pptx
 
01 introducción
01 introducción01 introducción
01 introducción
 
Introducción a Knockout
Introducción a KnockoutIntroducción a Knockout
Introducción a Knockout
 
Programacion 3 mvc
Programacion 3 mvcProgramacion 3 mvc
Programacion 3 mvc
 
Charla
CharlaCharla
Charla
 
Aplicaciones en capas1
Aplicaciones en capas1Aplicaciones en capas1
Aplicaciones en capas1
 
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)
 
Modelo vistacontrolador
Modelo vistacontroladorModelo vistacontrolador
Modelo vistacontrolador
 
Modelo vistacontrolador
Modelo vistacontroladorModelo vistacontrolador
Modelo vistacontrolador
 
Spring Mvc Final
Spring Mvc FinalSpring Mvc Final
Spring Mvc Final
 
MODELO VISTA CONTROLADOR
MODELO VISTA CONTROLADORMODELO VISTA CONTROLADOR
MODELO VISTA CONTROLADOR
 
MVC & ASP.NET (Spanish)
MVC & ASP.NET (Spanish)MVC & ASP.NET (Spanish)
MVC & ASP.NET (Spanish)
 
Esencia de web components
Esencia de web componentsEsencia de web components
Esencia de web components
 
Esencia de Web Components
Esencia de Web ComponentsEsencia de Web Components
Esencia de Web Components
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
 

Mehr von Sorey García

Internet de las Cosas y Netduino
Internet de las Cosas y NetduinoInternet de las Cosas y Netduino
Internet de las Cosas y Netduino
Sorey García
 
GWAB: Azure Mobile Services
GWAB: Azure Mobile ServicesGWAB: Azure Mobile Services
GWAB: Azure Mobile Services
Sorey García
 
Similitudes y deferencias en UX para Windows Phone y Windows
Similitudes y deferencias en UX para Windows Phone y WindowsSimilitudes y deferencias en UX para Windows Phone y Windows
Similitudes y deferencias en UX para Windows Phone y Windows
Sorey García
 
Hackaton Globant - Windows Phone (snnipets and tips)
Hackaton Globant - Windows Phone (snnipets and tips)Hackaton Globant - Windows Phone (snnipets and tips)
Hackaton Globant - Windows Phone (snnipets and tips)
Sorey García
 
Windows Phone 8: Tips de Diseño para Desarrolladores
Windows Phone 8: Tips de Diseño para DesarrolladoresWindows Phone 8: Tips de Diseño para Desarrolladores
Windows Phone 8: Tips de Diseño para Desarrolladores
Sorey García
 
Introducción a XAML y MVVM
Introducción a XAML y MVVMIntroducción a XAML y MVVM
Introducción a XAML y MVVM
Sorey García
 
Boya.ca - Introducción a Windows Phone
Boya.ca - Introducción a Windows PhoneBoya.ca - Introducción a Windows Phone
Boya.ca - Introducción a Windows Phone
Sorey García
 
Gestión de conocimiento
Gestión de conocimientoGestión de conocimiento
Gestión de conocimiento
Sorey García
 

Mehr von Sorey García (20)

Mision inspiración para docentes
Mision inspiración para docentesMision inspiración para docentes
Mision inspiración para docentes
 
NetConfUY: Maximizando la productividad del desarrollo móvil
NetConfUY: Maximizando la productividad del desarrollo móvilNetConfUY: Maximizando la productividad del desarrollo móvil
NetConfUY: Maximizando la productividad del desarrollo móvil
 
Introducción a Xamarin Forms con XAML
Introducción a Xamarin Forms con XAMLIntroducción a Xamarin Forms con XAML
Introducción a Xamarin Forms con XAML
 
WIE: El poder de transformar al mundo con tecnología
WIE: El poder de transformar al mundo con tecnologíaWIE: El poder de transformar al mundo con tecnología
WIE: El poder de transformar al mundo con tecnología
 
TechDay 2015 - C# y XAML: El poder de construir aplicaciones en todas las pla...
TechDay 2015 - C# y XAML: El poder de construir aplicaciones en todas las pla...TechDay 2015 - C# y XAML: El poder de construir aplicaciones en todas las pla...
TechDay 2015 - C# y XAML: El poder de construir aplicaciones en todas las pla...
 
Internet de las Cosas y Netduino
Internet de las Cosas y NetduinoInternet de las Cosas y Netduino
Internet de las Cosas y Netduino
 
Misión: Inspiración
Misión: InspiraciónMisión: Inspiración
Misión: Inspiración
 
Codies.Launch()
Codies.Launch()Codies.Launch()
Codies.Launch()
 
Tendencias de movilidad en el mercado masivo y empresarial
Tendencias de movilidad en el mercado masivo y empresarialTendencias de movilidad en el mercado masivo y empresarial
Tendencias de movilidad en el mercado masivo y empresarial
 
[Avanet] Fiesta del Libro y la Cultura Medellín
[Avanet] Fiesta del Libro y la Cultura Medellín[Avanet] Fiesta del Libro y la Cultura Medellín
[Avanet] Fiesta del Libro y la Cultura Medellín
 
MVP Open Day - Best Practices/Experiences
MVP Open Day - Best Practices/Experiences MVP Open Day - Best Practices/Experiences
MVP Open Day - Best Practices/Experiences
 
GWAB: Azure Mobile Services
GWAB: Azure Mobile ServicesGWAB: Azure Mobile Services
GWAB: Azure Mobile Services
 
Similitudes y deferencias en UX para Windows Phone y Windows
Similitudes y deferencias en UX para Windows Phone y WindowsSimilitudes y deferencias en UX para Windows Phone y Windows
Similitudes y deferencias en UX para Windows Phone y Windows
 
Conociendo el ecosistema de Windows Phone 8 y Windows 8
Conociendo el ecosistema de Windows Phone 8 y Windows 8Conociendo el ecosistema de Windows Phone 8 y Windows 8
Conociendo el ecosistema de Windows Phone 8 y Windows 8
 
Hackaton Globant - Windows Phone (snnipets and tips)
Hackaton Globant - Windows Phone (snnipets and tips)Hackaton Globant - Windows Phone (snnipets and tips)
Hackaton Globant - Windows Phone (snnipets and tips)
 
Windows Phone 8: Tips de Diseño para Desarrolladores
Windows Phone 8: Tips de Diseño para DesarrolladoresWindows Phone 8: Tips de Diseño para Desarrolladores
Windows Phone 8: Tips de Diseño para Desarrolladores
 
Introducción a XAML y MVVM
Introducción a XAML y MVVMIntroducción a XAML y MVVM
Introducción a XAML y MVVM
 
Sensibilización en Metodologías Ágiles
Sensibilización en Metodologías ÁgilesSensibilización en Metodologías Ágiles
Sensibilización en Metodologías Ágiles
 
Boya.ca - Introducción a Windows Phone
Boya.ca - Introducción a Windows PhoneBoya.ca - Introducción a Windows Phone
Boya.ca - Introducción a Windows Phone
 
Gestión de conocimiento
Gestión de conocimientoGestión de conocimiento
Gestión de conocimiento
 

Kürzlich hochgeladen

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Kürzlich hochgeladen (15)

presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8

  • 1.
  • 2.
  • 3. Windows Phone 8 App Windows 8 App
  • 4. Windows Phone 8 App Windows 8 App XAML UI Framework .NET Code (C#; VB.NET) Windows Runtime APIs DirectX 11 Native Interop Component Windows Runtime APIs Partner Runtimes & Game Engines IE10 Web Browser Control Partner Runtime Engines
  • 5.  Separar lógica de interfaz de usuario y la aplicación utilizando el patrón de MVVM  Compartir funcionalidad utilizando bibliotecas de clases de portables  Compartir código con Archivos Enlazados  Manejo de las diferencias de plataforma de Windows Phone y Windows 8  Compartir utilizando componentes Windows Runtime
  • 6.
  • 7.
  • 8. 1. Un origen 2. Un proyecto 3. Un ensamblado Multiples plataformas
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.     Plataforma Pueden crear Pueden consumir Windows Phone 8 C++ C++, C#, VB Windows 8 C++, C#, VB C++, C#, VB, Javascript
  • 15.
  • 16.
  • 18.
  • 19. View Data Bindings Interfaz de Usuario Commands One way One time Two way ViewModel Estructuras que representan los contextos de datos de las pantallas y el que permiten el acceso a la logica de negocio Model Clases con solo propiedades que representan las fuentes de los datos (archivos, servicios, bases de datos)
  • 20. Aplicaciones XAML Este es el escenario “típico” de un desarrollador .NET hasta antes de XAML o MVC” Etiqueta Caja de texto Aplicaciones de escritorio, web forms Etiqueta Caja de texto MainPage.xaml (Lenguaje declarativo XAML) Form.cs (Code behind C#) Form.designer.cs (C#) Clase Form MainPage.xaml.cs (Code behind C#) Clase MainPage
  • 21. Usando XAML se pueden crear de forma declarativa los mismos elementos gráficos que se crearían en código <StackPanel> <TextBox/> <Button/> </StackPanel> StackPanel stackPanel = new StackPanel(); TextBox textBox = new TextBox(); stackPanel.Children.Add(textBox); Button button = new Button(); stackPanel.Children.Add(button);
  • 22. Ambos escenarios permiten acceder a los controles de la pantalla como miembros de la clase que los contiene es decir this.txtMensaje.Text = “Hola”; Y crear event handlers para poner el código relacionado a una interacción del usuario, por ejemplo el click de un botón private void Button_Click(object sender, RoutedEventArgs e) { //Code } Ahora bien, el que esto se permita no significa que sea la práctica “sugerida”.
  • 23. View (XAML y Code behind) Data Bindings Commands ViewModel Model Trabajar con MVVM es una de las estrategias cross platform cuyo primer paso es entender en que parte se ubica nuestro “anterior” esquema de trabajo. Como podemos observar, trabajar de la forma típica no es más que trabajar sobre las vistas. ¿Funciona? Si, pero no es la practica correcta. Algunos desarrolladores alcanzan a llegar hasta implementar Vistas Modelos como contextos de datos, sin embargo los manipulan desde el code behind, lo que es inapropiado.
  • 24.
  • 26. <StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1" > <TextBlock TextWrapping="Wrap" Text="TextBlock"/> <TextBox Height="72" TextWrapping="Wrap" Text="TextBox"/> <TextBlock TextWrapping="Wrap" Text="TextBlock"/> <TextBox Height="72" TextWrapping="Wrap" Text="TextBox"/> <Button Content="Button"/> </StackPanel>
  • 27. <StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1" DataContext="{Binding Persona}" > <TextBlock TextWrapping="Wrap" Text="TextBlock"/> <TextBox Height="72" TextWrapping="Wrap" Text="{Binding Nombre, Mode=TwoWay}"/> <TextBlock TextWrapping="Wrap" Text="TextBlock"/> <TextBox Height="72" TextWrapping="Wrap" Text="{Binding Apellido, Mode=TwoWay}"/> <Button Content="Button"/> </StackPanel>
  • 28. <Grid x:Name="LayoutRoot" Background="Transparent" d:DataContext="{Binding Source={StaticResource SampleDataSource}}"> <StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1“ DataContext="{Binding Persona}" > </StackPanel> </Grid>
  • 29. class Class Model MainView Model + + SelectedTask :TaskViewModel TasksByCategory :ObservableCollection<CategoryViewModel> TaskView Model CategoryView Model + + + Identifier :int Name :string Tasks :ObservableCollection<TaskViewModel> + + + + + Identifier :int Name :string PlannedDate :DateTime Pomori :int Status :TaskStatus + + Delete() :void Save() :void
  • 32. class Class Model MainView Model «binding» «binding» Task's List «boundary» CategoryView Model TaskView Model Add/Modify Task «boundary» Fuente: http://www.slideshare.net/soreygarcia/planificando-las-bases-de-una-aplicacin-windows-phone
  • 33. public class ItemViewModel : INotifyPropertyChanged { private string lineOne; public string LineOne { get { return lineOne; } set { if (value != lineOne) { lineOne = value; NotifyPropertyChanged("LineOne"); } } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(String propertyName) { if (null != PropertyChanged) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }
  • 34.
  • 35. public class MainViewModel : BindableBase { private String nombre; public String Nombre { get { return this.nombre; } set { Set<String>(ref nombre, value); } }
  • 36. private static HueClientViewModel hueClientVM = null; public static HueClientViewModel HueClientVM { get{ if (hueClientVM == null) hueClientVM = new HueClientViewModel(); return hueClientVM; } } public HueClientView() { InitializeComponent(); this.DataContext = App.HueClientVM; }
  • 37. <Application x:Class="Hue_Demo_Phone.App“ ... xmlns:vm="clr-namespace:Hue_Demo_Phone.ViewModels"> <Application.Resources> <vm:HueClientViewModel x:Key="HueClientVM" /> </Application.Resources> <phone:PhoneApplicationPage ... "DataContext="{StaticResource HueClientVM}">
  • 38.
  • 40.
  • 42. <StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1" DataContext="{Binding Persona}" > <TextBlock TextWrapping="Wrap" Text="TextBlock"/> <TextBox Height="72" TextWrapping="Wrap" Text="{Binding Nombre, Mode=TwoWay}"/> <TextBlock TextWrapping="Wrap" Text="TextBlock"/> <TextBox Height="72" TextWrapping="Wrap" Text="{Binding Apellido, Mode=TwoWay}"/> <Button Content="Button" Command="{Binding GuardarPerfilCommand}"/> </StackPanel>
  • 43. <Button Content="Press this" Height="72" Margin="90,464,0,0" Name="button1" Width="300" Command="{Binding HelloCommand}"/> <ListBox Height="100" x:Name="listBox1" > <i:Interaction.Triggers> <i:EventTrigger EventName="SelectionChanged"> <i:InvokeCommandAction Command="{Binding SelectionChanged}" CommandParameter="{Binding ElementName=listBox1, Path=SelectedIndex}"/> </i:EventTrigger> </i:Interaction.Triggers> </ListBox>
  • 44. public interface ICommand { void Execute(object parameter); bool CanExecute(object parameter); event EventHandler CanExecuteChanged; } public class HelloWorldCommand : ICommand { public void Execute(object parameter) { Debug.WriteLine("Hello, world"); } public bool CanExecute(object parameter) { return true; } public event EventHandler CanExecuteChanged; } new HelloWorldCommand().Execute(null);
  • 45.
  • 46. public MainViewModel() { this.guardarPerfilCommand = new RelayCommand(GuardarPerfil, null); } #region GuardarPerfil private ICommand guardarPerfilCommand; public ICommand GuardarPerfilCommand { get { return this.guardarPerfilCommand; } } private async void GuardarPerfil() { //Code } #endregion GuardarPerfil
  • 47.
  • 49.
  • 51.
  • 52. public class MainViewModel { private DataService dataSvc; public MainViewModel() { dataSvc= new DataService(); } public void XYZmethod() { var theCar = dataSvc.Car; ... NavigationService.Instance.GoBack(); } ... }
  • 53.
  • 55. public class MainViewModel { private IDataService dataSvc; private INavigationService navSvc; public MainViewModel(IDataService data, INavigationService nav) { dataSvc= data; navSvc = nav; } public void XYZmethod() { var theCar = dataSvc.Car; ... navSvc.GoBack(); } ... }
  • 56.
  • 57. <phone:PhoneApplicationPage> <!-- XAML --> <phone:PhoneApplicationPage.DataContext> <Binding Path="Main" Source="{StaticResource Locator}"/> </phone:PhoneApplicationPage.DataContext> <Grid x:Name="LayoutRoot" Background="Transparent" > <StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1“ DataContext="{Binding Persona}" > </StackPanel> </Grid>
  • 58.
  • 59. public class ViewModelLocator { static ViewModelLocator() { ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); // Using SimpleIOC // Register Services if (ViewModelBase.IsInDesignModeStatic) SimpleIoc.Default.Register<IDataService, Design.DesignDataService>(); else SimpleIoc.Default.Register<IDataService, DataService>(); SimpleIoc.Default.Register<INavigationService, NavigationService>(); // Register ViewModels SimpleIoc.Default.Register<MainViewModel>(); } // Following property returns an instance of MainViewModel, with dependencies injected public MainViewModel Main { get { return ServiceLocator.Current.GetInstance<MainViewModel>(); } } }
  • 60.  Repository Pattern  Messenger Pattern  EventToCommand
  • 62.