SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
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
UserInterface
AppLogic
General Model-View-ViewModel (MVVM)
Model
View
ViewModel
Data Bindings
One way
One time
Two way
Commands
Interfaz de Usuario
Clases con solo
propiedades que
representan las fuentes de
los datos (archivos,
servicios, bases de datos)
Estructuras que
representan los contextos
de datos de las pantallas y
el que permiten el acceso
a la logica de negocio
Aplicaciones de escritorio, web forms
Caja de texto
Etiqueta
Form.cs (Code behind C#)
Form.designer.cs (C#)
Clase
Form
Usar code behind en clases parciales,
es el escenario “típico o más sencillo”
de un desarrollador .NET.
Aplicaciones XAML
Caja de texto
Etiqueta
MainPage.xaml
(Lenguaje declarativo XAML)
MainPage.xaml.cs (Code behind C#)
Clase
MainPage
Nuestra meta para
hacer código portable
es usar code hind al
mínimo posible. En la
demo de hecho cero
code behind.
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 }
Sin embargo como ya lo dijimos, está no es la mejor práctica para hacer
código portable y reusable.
Nombre
Editar perfil
Apellido
12:38
recordar
*****
iniciar sesión
password
soreygarcia
usuario
Text={Binding alias}
Password={Binding password}
Command={Binding IniciarSesionCommand}
DataContext={Binding Path=Usuario, Source={StaticResource Locator}}
<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">
<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 Path=Persona, Source={StaticResource SampleDataSource}}">
<Grid x:Name="ContentPanel">
<!– Aquí van los demás elementos de nuestra vista -->
</Grid>
</Grid>
class Models
Player
«property»
+ Clues(): List<string>
+ Id(): int
+ Name(): string
+ Photo(): string
Esta clase es suficiente
para serializar el archivo
que tenemos
class ViewModels
ClueViewModel
«property»
+ Name(): string
+ Value(): string
BindableBase
MainViewModel
- jsonService: IJsonService
- navigationService: INavigationService
- phoneService: IPhoneService
- randomGen: Random
- LoadPlayers(): void
+ MainViewModel(INavigationService, IPhoneService)
~ SufflePlayers(): void
«property»
+ Players(): ObservableCollection<PlayerViewModel>
+ SelectedPlayer(): PlayerViewModel
BindableBase
PlayerViewModel
- navigationService: INavigationService
- phoneService: IPhoneService
- wasDiscovered: bool
- Discover(): void
- Guess(): void
+ PlayerViewModel(INavigationService, IPhoneService)
«property»
+ Answer(): string
+ Clues(): ObservableCollection<ClueViewModel>
+ DiscoverCommand(): ICommand
+ GuessCommand(): ICommand
+ Id(): int
+ Name(): string
+ ParentViewModel(): MainViewModel
+ Photo(): string
+ WasDiscovered(): bool
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
{
nombre = value;
RaisePropertyChanged(“Nombre”);
}
}
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}">
<phone:PhoneApplicationPage>
<!-- XAML -->
<phone:PhoneApplicationPage.DataContext>
<Binding Path="Main" Source="{StaticResource Locator}"/>
</phone:PhoneApplicationPage.DataContext>
<Grid x:Name="LayoutRoot" Background="Transparent" >
</Grid>
Events
Event
Handlers
Commanding
<StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1" >
<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 ICommand GuardarPerfilCommand
{
get { return new RelayCommand(GuardarPerfil, null);}
}
private async void GuardarPerfil()
{
//Code
}
#endregion GuardarPerfil
class StickerBook
StickerBook.Logic
+ Common
+ Contracts
+ Models
+ Services
+ ViewModels
StickerBook.WinPhone
+ App
+ Common
+ Converters
+ Pages
+ Properties
+ SampleData
+ Services
StickerBook.WinRT
+ App
+ Common
+ Converters
+ Pages
+ Properties
+ SampleData
+ Services




http://aka.ms/ShareCode
Taller MVVM Imagine Camp Medellín (Intermedio)

Más contenido relacionado

La actualidad más candente

Guia Practica Maquetación HTML5, CSS
Guia Practica Maquetación HTML5, CSSGuia Practica Maquetación HTML5, CSS
Guia Practica Maquetación HTML5, CSSlissette_torrealba
 
Guia html2
Guia html2Guia html2
Guia html2ljds
 
Sesiones y cookies en php
Sesiones y cookies en phpSesiones y cookies en php
Sesiones y cookies en phpRobert Moreira
 
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 Vistajuliocasal
 
Un Vistazo A Windows Presentation Foundation
Un Vistazo A Windows Presentation FoundationUn Vistazo A Windows Presentation Foundation
Un Vistazo A Windows Presentation Foundationjuliocasal
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryDavid Arango
 
Model View Controller (MVC)
Model View Controller (MVC)Model View Controller (MVC)
Model View Controller (MVC)victorbalta
 
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.NETJavier Roig
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
Guía Teórica unidad III, Interfaz Gráficas de Usuarios
Guía Teórica unidad III, Interfaz Gráficas de UsuariosGuía Teórica unidad III, Interfaz Gráficas de Usuarios
Guía Teórica unidad III, Interfaz Gráficas de Usuarioslissette_torrealba
 
Guia bootstrap
Guia bootstrapGuia bootstrap
Guia bootstrapljds
 
Poo introduccion al patron mvc - renee morales calhua
Poo  introduccion al patron mvc - renee morales calhuaPoo  introduccion al patron mvc - renee morales calhua
Poo introduccion al patron mvc - renee morales calhuaRenee Morales Calhua
 
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.NETJavier Roig
 
Intro a ASP.NET
Intro a ASP.NETIntro a ASP.NET
Intro a ASP.NETwilliamsm
 

La actualidad más candente (20)

Guia Practica Maquetación HTML5, CSS
Guia Practica Maquetación HTML5, CSSGuia Practica Maquetación HTML5, CSS
Guia Practica Maquetación HTML5, CSS
 
Guia html2
Guia html2Guia html2
Guia html2
 
Sesiones y cookies en php
Sesiones y cookies en phpSesiones y cookies en php
Sesiones y cookies en php
 
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
 
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
 
MVC
MVCMVC
MVC
 
Un Vistazo A Windows Presentation Foundation
Un Vistazo A Windows Presentation FoundationUn Vistazo A Windows Presentation Foundation
Un Vistazo A Windows Presentation Foundation
 
Semana 4 Estructura y componentes SPA
Semana 4  Estructura y componentes SPASemana 4  Estructura y componentes SPA
Semana 4 Estructura y componentes SPA
 
Dce2 ejercicios asp.net
Dce2 ejercicios asp.netDce2 ejercicios asp.net
Dce2 ejercicios asp.net
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQuery
 
Model View Controller (MVC)
Model View Controller (MVC)Model View Controller (MVC)
Model View Controller (MVC)
 
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
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Com521
Com521Com521
Com521
 
Guía Teórica unidad III, Interfaz Gráficas de Usuarios
Guía Teórica unidad III, Interfaz Gráficas de UsuariosGuía Teórica unidad III, Interfaz Gráficas de Usuarios
Guía Teórica unidad III, Interfaz Gráficas de Usuarios
 
Guia bootstrap
Guia bootstrapGuia bootstrap
Guia bootstrap
 
Poo introduccion al patron mvc - renee morales calhua
Poo  introduccion al patron mvc - renee morales calhuaPoo  introduccion al patron mvc - renee morales calhua
Poo introduccion al patron mvc - renee morales calhua
 
Asp.net
Asp.netAsp.net
Asp.net
 
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
 
Intro a ASP.NET
Intro a ASP.NETIntro a ASP.NET
Intro a ASP.NET
 

Similar a Taller MVVM Imagine Camp Medellín (Intermedio)

Introducción a Knockout
Introducción a KnockoutIntroducción a Knockout
Introducción a KnockoutOscar Gensollen
 
CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010Comunidad SharePoint
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)josecuartas
 
6. Utilización del modelo de objetos del documento (DOM)
6. Utilización del modelo de objetos del documento (DOM)6. Utilización del modelo de objetos del documento (DOM)
6. Utilización del modelo de objetos del documento (DOM)Laura Folgado Galache
 
Aplicaciones n capas en visual.net
Aplicaciones n capas en visual.netAplicaciones n capas en visual.net
Aplicaciones n capas en visual.netLisbeth Ocaña Bueno
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSIan Monge Pérez
 
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y ValidacionesDesarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y ValidacionesDidier Granados
 
Guía Practica conexión BD 2021
Guía Practica conexión BD  2021Guía Practica conexión BD  2021
Guía Practica conexión BD 2021lissette_torrealba
 
Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generationSergi Almar i Graupera
 
TUTORIAL DE ADO.NET MUY BUENO
TUTORIAL DE ADO.NET MUY BUENOTUTORIAL DE ADO.NET MUY BUENO
TUTORIAL DE ADO.NET MUY BUENOiberhack
 
Persistencia de un modelo de objetos
Persistencia de un modelo de objetosPersistencia de un modelo de objetos
Persistencia de un modelo de objetosJorge Ercoli
 

Similar a Taller MVVM Imagine Camp Medellín (Intermedio) (20)

Introducción a Knockout
Introducción a KnockoutIntroducción a Knockout
Introducción a Knockout
 
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
 
CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)
 
6. Utilización del modelo de objetos del documento (DOM)
6. Utilización del modelo de objetos del documento (DOM)6. Utilización del modelo de objetos del documento (DOM)
6. Utilización del modelo de objetos del documento (DOM)
 
Clase xiii
Clase xiiiClase xiii
Clase xiii
 
Aplicaciones n capas en visual.net
Aplicaciones n capas en visual.netAplicaciones n capas en visual.net
Aplicaciones n capas en visual.net
 
Programación por Capas en PHP
Programación por Capas en PHPProgramación por Capas en PHP
Programación por Capas en PHP
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Introduccion mvc
Introduccion mvcIntroduccion mvc
Introduccion mvc
 
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y ValidacionesDesarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
 
Guía Practica conexión BD 2021
Guía Practica conexión BD  2021Guía Practica conexión BD  2021
Guía Practica conexión BD 2021
 
Framework
FrameworkFramework
Framework
 
Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generation
 
TUTORIAL DE ADO.NET MUY BUENO
TUTORIAL DE ADO.NET MUY BUENOTUTORIAL DE ADO.NET MUY BUENO
TUTORIAL DE ADO.NET MUY BUENO
 
Guia herramientas de bd
Guia herramientas de bdGuia herramientas de bd
Guia herramientas de bd
 
Persistencia de un modelo de objetos
Persistencia de un modelo de objetosPersistencia de un modelo de objetos
Persistencia de un modelo de objetos
 
Curso introductorio a Raptor.js con Node.js
Curso introductorio a Raptor.js con Node.jsCurso introductorio a Raptor.js con Node.js
Curso introductorio a Raptor.js con Node.js
 
Jdbc
JdbcJdbc
Jdbc
 
Charla
CharlaCharla
Charla
 

Más de Sorey García

Mision inspiración para docentes
Mision inspiración para docentesMision inspiración para docentes
Mision inspiración para docentesSorey García
 
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óvilSorey García
 
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 XAMLSorey García
 
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íaSorey Garcí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...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 NetduinoSorey García
 
Misión: Inspiración
Misión: InspiraciónMisión: Inspiración
Misión: InspiraciónSorey García
 
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 empresarialSorey García
 
[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ínSorey García
 
MVP Open Day - Best Practices/Experiences
MVP Open Day - Best Practices/Experiences MVP Open Day - Best Practices/Experiences
MVP Open Day - Best Practices/Experiences Sorey García
 
GWAB: Azure Mobile Services
GWAB: Azure Mobile ServicesGWAB: Azure Mobile Services
GWAB: Azure Mobile ServicesSorey 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 WindowsSorey García
 
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 8Sorey 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 DesarrolladoresSorey García
 
JSConfCo: Desarrollo de Aplicaciones para Windows Store con HTML5 y Javascript
JSConfCo: Desarrollo de Aplicaciones para Windows Store con HTML5 y JavascriptJSConfCo: Desarrollo de Aplicaciones para Windows Store con HTML5 y Javascript
JSConfCo: Desarrollo de Aplicaciones para Windows Store con HTML5 y JavascriptSorey García
 
Windows Phone 8 en Campus Party
Windows Phone 8 en Campus PartyWindows Phone 8 en Campus Party
Windows Phone 8 en Campus PartySorey García
 
Introducción a XAML y MVVM
Introducción a XAML y MVVMIntroducción a XAML y MVVM
Introducción a XAML y MVVMSorey García
 
Sensibilización en Metodologías Ágiles
Sensibilización en Metodologías ÁgilesSensibilización en Metodologías Ágiles
Sensibilización en Metodologías ÁgilesSorey García
 

Más de 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
 
JSConfCo: Desarrollo de Aplicaciones para Windows Store con HTML5 y Javascript
JSConfCo: Desarrollo de Aplicaciones para Windows Store con HTML5 y JavascriptJSConfCo: Desarrollo de Aplicaciones para Windows Store con HTML5 y Javascript
JSConfCo: Desarrollo de Aplicaciones para Windows Store con HTML5 y Javascript
 
Windows Phone 8 en Campus Party
Windows Phone 8 en Campus PartyWindows Phone 8 en Campus Party
Windows Phone 8 en Campus Party
 
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
 

Último

La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nóminacuellosameidy
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y maslida630411
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaYeimys Ch
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 

Último (20)

La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nómina
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y mas
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 

Taller MVVM Imagine Camp Medellín (Intermedio)

  • 1.
  • 2. 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
  • 3.
  • 5.
  • 6. Model View ViewModel Data Bindings One way One time Two way Commands Interfaz de Usuario Clases con solo propiedades que representan las fuentes de los datos (archivos, servicios, bases de datos) Estructuras que representan los contextos de datos de las pantallas y el que permiten el acceso a la logica de negocio
  • 7. Aplicaciones de escritorio, web forms Caja de texto Etiqueta Form.cs (Code behind C#) Form.designer.cs (C#) Clase Form Usar code behind en clases parciales, es el escenario “típico o más sencillo” de un desarrollador .NET. Aplicaciones XAML Caja de texto Etiqueta MainPage.xaml (Lenguaje declarativo XAML) MainPage.xaml.cs (Code behind C#) Clase MainPage Nuestra meta para hacer código portable es usar code hind al mínimo posible. En la demo de hecho cero code behind.
  • 8. 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);
  • 9. 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 } Sin embargo como ya lo dijimos, está no es la mejor práctica para hacer código portable y reusable.
  • 11. 12:38 recordar ***** iniciar sesión password soreygarcia usuario Text={Binding alias} Password={Binding password} Command={Binding IniciarSesionCommand} DataContext={Binding Path=Usuario, Source={StaticResource Locator}}
  • 12. <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>
  • 13. <StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1"> <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>
  • 14. <Grid x:Name="LayoutRoot" Background="Transparent" d:DataContext="{Binding Path=Persona, Source={StaticResource SampleDataSource}}"> <Grid x:Name="ContentPanel"> <!– Aquí van los demás elementos de nuestra vista --> </Grid> </Grid>
  • 15.
  • 16.
  • 17. class Models Player «property» + Clues(): List<string> + Id(): int + Name(): string + Photo(): string Esta clase es suficiente para serializar el archivo que tenemos
  • 18. class ViewModels ClueViewModel «property» + Name(): string + Value(): string BindableBase MainViewModel - jsonService: IJsonService - navigationService: INavigationService - phoneService: IPhoneService - randomGen: Random - LoadPlayers(): void + MainViewModel(INavigationService, IPhoneService) ~ SufflePlayers(): void «property» + Players(): ObservableCollection<PlayerViewModel> + SelectedPlayer(): PlayerViewModel BindableBase PlayerViewModel - navigationService: INavigationService - phoneService: IPhoneService - wasDiscovered: bool - Discover(): void - Guess(): void + PlayerViewModel(INavigationService, IPhoneService) «property» + Answer(): string + Clues(): ObservableCollection<ClueViewModel> + DiscoverCommand(): ICommand + GuessCommand(): ICommand + Id(): int + Name(): string + ParentViewModel(): MainViewModel + Photo(): string + WasDiscovered(): bool
  • 19. 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)); } }
  • 20.
  • 21. public class MainViewModel : BindableBase { private String nombre; public String Nombre { get { return this.nombre; } set { nombre = value; RaisePropertyChanged(“Nombre”); } }
  • 22.
  • 23. 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; }
  • 24. <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}">
  • 25. <phone:PhoneApplicationPage> <!-- XAML --> <phone:PhoneApplicationPage.DataContext> <Binding Path="Main" Source="{StaticResource Locator}"/> </phone:PhoneApplicationPage.DataContext> <Grid x:Name="LayoutRoot" Background="Transparent" > </Grid>
  • 26.
  • 27.
  • 29. <StackPanel x:Name="ContentPanel" Margin="12,0,12,0" Grid.Row="1" > <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>
  • 30. <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>
  • 31.
  • 32. public ICommand GuardarPerfilCommand { get { return new RelayCommand(GuardarPerfil, null);} } private async void GuardarPerfil() { //Code } #endregion GuardarPerfil
  • 33.
  • 34.
  • 35.
  • 36.
  • 37. class StickerBook StickerBook.Logic + Common + Contracts + Models + Services + ViewModels StickerBook.WinPhone + App + Common + Converters + Pages + Properties + SampleData + Services StickerBook.WinRT + App + Common + Converters + Pages + Properties + SampleData + Services