none
Como acceder a un objeto del MainView desde otra View en mi App Metro Style???

    Question

  • Hola,

    Como puedo acceder a un objeto de mi MainView desde cualquier View dentro de mi App???.

    A lo mejor estoy planteando mal mi Model-View-ViewModel, me echáis una mano??? .... Me gustaría tener un objeto, accesible desde cualquier parte de mi aplicación, el cual englobe una serie de parámetros modificables y necesarios para el desarrollo de la App. Donde lo podría inicializar???. Como me debería plantear esto????.

    Saludos.

    Wednesday, May 01, 2013 10:49 AM

All replies

  • Hola jsancho.

    Lo lógico es que en el ViewModel tengas la propiedad que quieres mostrar en todas las pantallas.

    Puedes descargarte los materiales de mi webcast en el que hablé sobre MVVM y cómo montarlo http://geeks.ms/blogs/santypr/archive/2013/04/24/webcast-windows-8-disponibles-los-materiales-del-webcast.aspx

    También puedes leer lo que ha publicado al respecto Josué Yeray http://geeks.ms/blogs/jyeray/default.aspx


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS)
    Twitter | @saintwukong

    Thursday, May 02, 2013 8:37 AM
  • Gracias Santiago,

    Le echaré un ojo y seguro me servirá ..... De todos modos si me atasco seguiré preguntando.

    Saludos

    Thursday, May 02, 2013 3:23 PM
  • Genial jsanchco.

    Sobre todo guíate por los estándares que explica Josue Yeray y verás que es sencillo y te ahorra mucho trabajo a posteriori.


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS)
    Twitter | @saintwukong

    Thursday, May 02, 2013 3:25 PM
  • Hola Santiago,

    Me he visto tu video un par de veces y me ha parecido muy interesante. Ahora empiezo a disparate con mis preguntas .... jajajajaja!!!

    Primero indicarte que llevo tiempo sin programar pero que estoy intentando ponerme las pilas, me gustaría poder desarrollar cositas para la AppStore. Me parece que el futuro de la programación ha decidido Microsoft que aprendamos Modern UI. Por otro lado el modelo MVVM creo yo que es el mas acertado para estos entornos.

    Estoy intentando hacer primero algo sencillito a modo de ejemplo y así romper el hielo. Te cuento en que consiste mi App a grandes rasgos.

    Es una App hecha en VS2012 basada en Modern UI, para poder publicarla en la AppStore bajo sus estándares. Es una simple App de gestión de Clientes, Proveedores, Ventas ... Utilizare como gestor de Base de Datos SQLite y básicamente en la pantalla de inicio tendremos tres/cuatro botones pinchando en cada cual navegaremos/iremos a otra Page que será el Detalle de todos los Clientes/Proveedores/Ventas .... La típica App que con VS2010 y WinForms con su Code Behind se resuelve en dos momentos. Pero aquí, en este entorno nuevo tengo mis dudas:

    El Modelo de datos parece que lo tengo claro: clase para Clientes, clase para Proveedores, clase para Ventas .... Te parece??

    El ViewModel por lo que he leído y he visto en tu video, debería tener un ViewModel por cada Vista, no es asi??

    El Objeto SQLite que accede a la BD me gustaría que fuese común para todas las ViewModel, buena opción???, como lo podría hacer??

    Cuando desde la pagina principal pincho y navego a otra vista, como instancio el ViewModel adecuado??, mandando algún mensaje???

    Se me hace complicado abstraer tu video a mi aplicación .... Podrías indicarme como procederías tu a hacer esta App???

    Saludos.

    Saturday, May 04, 2013 4:38 PM
  • Hola jsanchco.

    Déjame pensarlo y te envío una propuesta ;o)


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS)
    Twitter | @saintwukong

    Monday, May 06, 2013 9:59 AM
  • Gracias Santiago .... Esperando ansiosamente .... jajajajaja!!!

    Saludos.

    Monday, May 06, 2013 3:20 PM
  • Hola jsanchco.

    Disculpa que no te respondiera antes pero he estado en cama con gripe.

    Se te presentan varias opciones:

    • Opción CodeBehind: Trabajarías prácticamente igual que con una aplicación de WinForms. Puede ser conveniente en aplicaciones de poca lógica de negocio, muy pequeñas, que nunca van a ser escaladas o que sólo van a estar en esa plataforma.
    • Opción MVVM con un único ViewModel para todo: Si la lógica de negocio no es muy complicada ni grande y tienes poca información que tratar, podrías tener un único ViewModel con todo lo necesario
    • Opción MVVM con varios ViewModel: No tienen por qué estar identificados por páginas, ni por modelos sino por lo que sea más conveniente para un correcto funcionamiento de tu aplicación y que mantenga una relación lógica.

    En tu caso, yo optaría por dividir en ViewModels según la lógica de la aplicación.

    En cuanto a SQLite, al igual que viste el servicio de Mensajes que se encuentra en el ejemplo que te trasladé, deberías crear un servicio de "Datos" que yo siempre llamo "StorageService". Tendrías que registrarlo en el "Locator" igual que el servicio de mensajes.

    El ViewModel se "instancia" desde el Locator y, para ello, lo único que tienes que hacer es añadirlo en el contexto de la página donde vaya a ser usado. Es algo automático gracias a Autofac y se queda persistido durante la ejecución de la aplicación. Fíjate cómo declaré el MainViewModel en el ejemplo que te pasé y deberías hacer lo mismo.

    A tener en cuenta, como los ViewModel están persistidos tienes que controlar los datos de navegación, limpiarlos una vez los hayas usado, etc.


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS), Developing ASP.NET MVC 4 Web Applications
    Twitter | @saintwukong

    Monday, May 13, 2013 9:12 AM
  • Hola Santiago,

    Perdona por no haberte contestado antes, llevo unos días un poco 'locos'. Intentaré trasladar tus enseñanzas a mi App. Seguro que me encontraré con mil problemas, pero seguro que yo siendo tan pesado y tu tan dispuesto me resolverás ... jajajaja!!!. Una ultima cosa, en caso de atascarme en exceso, puedo mandarte mi solución/proyecto y que tu le eches un ojo, y me indiques????.

    Gracias.

    Wednesday, May 15, 2013 7:57 PM
  • Hola de nuevo jsanchco.

    Sin problemas ;o) Puedo echarle un vistazo, pero no te prometo que sea inmediato ;o)


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS), Developing ASP.NET MVC 4 Web Applications
    Twitter | @saintwukong

    Wednesday, May 15, 2013 8:12 PM
  • Hola Santiago,

    Como te comenté he empezado a trasladar tus indicaciones a mi proyecto y ya comienzo a tener problemas/preguntas:

    1º Me gustaría tener un objeto 'BaseDeDatos' en el MainViewModel que se instancie una sola vez y que sea el encargado de gestionar peticiones/transacciones con mi base de datos. Este objeto debería ser visible en todas mis vistas, mejor dicho en todas mis ViewModel. Comentas en el post anterior que tu lo harías mediante un servicio de Datos -> StorageService, como lo podría hacer?? y porque mediante un servicio de datos???, si lo instancio en el MainViewModel como puedo acceder desde cualquier otra ViewModel??

    2º Otro tema que me tiene un poco confundido es el tema de la navegación entre Vistas. Imaginate, tengo un botón en el MainView que me debería llevar a otra page. Como se trasladaría esto a mi MVVM???, es decir mediante code behind esto seria tan sencillo como asociar el evento Click del botón al Frame.Navigate(typeof(XXXXX)), pero en MVVM supongo que no seria tan sencillo. De igual manera el GoBack de mi Vista (XXXXX) como se haría??

    Muchas preguntas Santiago, soy algo pesado, pero supongo que cuando le coja el rollo será coser y cantar .... Gracias.

    Thursday, May 16, 2013 6:51 PM
  • Hola de nuevo jsanchco.

    1. Lo que comentas de interacción con base de datos debería ser un servicio. El mainviewmodel sólamente tendría propiedades, comandos y métodos que hicieran uso de ese servicio. Tendrías que declararlo de la misma forma que ejemplifiqué con el servicio de mensajes. El por qué, pues porque un "servicio" sería común y cualquier viewmodel podría acceder a él y porque el ViewModel debe contener la lógica de negocio y no el acceso a datos. De hecho, el viewmodel es algo común que podrías tener en una Portable Class Library junto con las interfaces de los servicios. Esto te serviría para poder compartir código con Windows Phone, con Silverlight, Web,... y, en cada uno de esos proyectos deberías tener la implementación de esos servicios.
    2. En este caso, tendrías que declarar un command igual que hice en el ejemplo con el messagebox y, el método que finalmente ejecuta el comando debería de realizar la navegación. Si quieres hacerlo para nota, deberías tener un servicio de navegación y que el método del comando, sólo realice una llamada al servicio de navegación para poder ir a la siguiente página, ¿Por qué? Pues por lo que te comenté en el punto anterior, si quieres realizar la misma app en Windows Phone, tendrías que tener la interfaz en la portable class library y en el proyecto de Windows 8 y de Windows Phone 8 su correspondiente implementación de esa interfaz de navegación.

    No te preocupes por preguntar, si quieres puedes contactar conmigo por email y seguimos por allí. Accede a mi blog y contacta conmigo a través de allí para tener tu email y ya seguimos más rápido así http://geeks.ms/blogs/santypr/contact.aspx


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS), Developing ASP.NET MVC 4 Web Applications
    Twitter | @saintwukong

    Thursday, May 16, 2013 7:07 PM
  • Hola Santiago,

    Acabo de ponerte un mensaje en tu blog ....

    Saludos.

    Thursday, May 16, 2013 7:23 PM