none
Views y ViewModels en proyectos diferentes / Views and ViewModels in different projects RRS feed

  • Pregunta

  • Dear Sirs,

    I would like to know how does MVVM pattern works fine when you have different projects for Views and ViewModels. My application is VB and WPF based, but a C# and WPF answer would be also valid.

    If I work in a WPF app and I have different folders, I can have my Views in one folder and my ViewModels in another, there is no problem. All works fine.

    But if I works in a WPF application and there I have my views, and then I create another project, a class library one, for my ViewModels, I can set the datacontext right, but when I am going to implemente ICommand class the trobles comes, because the namespace Windows.System.Input is only in WPF and it does not exist in DLL projects (or that is what I think, please tell me if I am wrong). That means that as soon as I write "implements ICommand", it appears underlined in red, and I cannot import (using) the namespace.

    Maybe one solutions is to create one WPF project for Views and another WPF project for ViewModels, but I do not think it is a smart solution. What is the ideal solution in these cases? How can I implement the ICommand when MVVM pattern is separated in different projects?

    Thank you very much and sorry for my poor English

    ---------------------------

     

    Buenos días:

    Me gustaría saber cómo hacen ustedes para que el patrón MVVM les funcione correctamente cuando tienen proyectos diferentes para las Views y los ViewModels. Les diré que yo lo estoy intentando con Visual Basic y WPF, pero supongo que me valdría igualmente una respuesta para C# y WPF.

    Si yo creo una aplicación WPF y en ella tengo diferentes carpetas, puedo tener mis Views en una carpeta y mis ViewModels en otra, sin ningún problema. Todo funciona correctamente.

    Si creo una apliación WPF y en ella tengo mis Views, y luego creo otro proyecto de biblioteca de clases para tener mis ViewModels, puedo enlazar el datacontext sin problemas, pero cuando voy a implementar la clase ICommand es cuando llegan los errores, porque el namespace Windows.System.Input es propio de WPF y no existe en proyectos de DLL (o eso creo, por favor, corríjanme si estoy equivocado). Esto implica que en cuanto pongo "implements ICommand", me aparezca subrayado en rojo, y lo que es peor, que no me sea posible importar (usar) el namespace.

    Una solución que se me ocurre es crear proyectos de WPF tanto para las vistas como para los ViewModels, pero no creo que sea la solución más elegante. ¿Cual es la solución que se debe usar en estos casos? ¿como se implementa ICommand cuando el patrón MVVM se intenta separar en diferentes proyectos para Views y ViewModels?

    Muchas gracias por su colaboración


    Carlos Adrián Martínez
    viernes, 30 de diciembre de 2011 12:03

Respuestas

  • El problema es que no tenés hecha una referencia a PresentationCore.dll, que se agrega automáticamente en un proyecto WPF. Creo que agregar la referencia no te será muy difícil, pero si necesitás ayuda avisame.

    Por otra parte, no veo ningún problema en agregar esta referencia, pero si alguien cree que no es correcto por favor corríjame.

    Saludos.


    Martín Coll - mi blog es martincoll.com.ar, date una vuelta!
    • Marcado como respuesta Carlos Adrián sábado, 31 de diciembre de 2011 13:49
    sábado, 31 de diciembre de 2011 0:14

Todas las respuestas

  • El problema es que no tenés hecha una referencia a PresentationCore.dll, que se agrega automáticamente en un proyecto WPF. Creo que agregar la referencia no te será muy difícil, pero si necesitás ayuda avisame.

    Por otra parte, no veo ningún problema en agregar esta referencia, pero si alguien cree que no es correcto por favor corríjame.

    Saludos.


    Martín Coll - mi blog es martincoll.com.ar, date una vuelta!
    • Marcado como respuesta Carlos Adrián sábado, 31 de diciembre de 2011 13:49
    sábado, 31 de diciembre de 2011 0:14
  • Muchas gracias, agregué la referencia y ya me dejó importar el espacio de nombres Windows.System.Input, con lo cual ya puedo usar ICommand.

    Ahora me aparece subrayado, CollectionViewSource, por lo que me pondré a investigar.

     

    Bueno, lo del ICommand ya está arreglado, así que lo marco como respuesta.

    GRACIAS


    Carlos Adrián Martínez
    sábado, 31 de diciembre de 2011 13:50
  • Hola Carlos

    Solo tienes que hacer una busqueda en la MSDN Library y encontrarás que CollectionViewSource está en la librería PresentationFramework.dll.

    Nota donde dice Assembly: http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource.aspx

    Saludos


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    sábado, 31 de diciembre de 2011 13:58