Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. WPF
  4. Starter MVVM Framework Recommendation

Starter MVVM Framework Recommendation

Scheduled Pinned Locked Moved WPF
wpfcsharpsql-servercollaboration
14 Posts 7 Posters 1 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    cjb110
    wrote on last edited by
    #1

    What of the many MVVM frameworks would be recommended for a team that wants to start developing WPF/SL apps? As a background the team is mainly experienced in VB6/Access VBA, and a lot of TSQL knowledge as well. Obviously we have a lot to learn, but I'm not sure we want to start on the wrong step and start with the code-behind method. At the moment I'm leaning toward Prism, but mainly because it seems to have the most complete documentation. Or will we be taking a step to far, and should stick to code-behind until we have the experience?

    P V M S 4 Replies Last reply
    0
    • C cjb110

      What of the many MVVM frameworks would be recommended for a team that wants to start developing WPF/SL apps? As a background the team is mainly experienced in VB6/Access VBA, and a lot of TSQL knowledge as well. Obviously we have a lot to learn, but I'm not sure we want to start on the wrong step and start with the code-behind method. At the moment I'm leaning toward Prism, but mainly because it seems to have the most complete documentation. Or will we be taking a step to far, and should stick to code-behind until we have the experience?

      P Offline
      P Offline
      Pete OHanlon
      wrote on last edited by
      #2

      MVVM Light now comes with training from Pluralsight. It's a good place to start.

      C 1 Reply Last reply
      0
      • C cjb110

        What of the many MVVM frameworks would be recommended for a team that wants to start developing WPF/SL apps? As a background the team is mainly experienced in VB6/Access VBA, and a lot of TSQL knowledge as well. Obviously we have a lot to learn, but I'm not sure we want to start on the wrong step and start with the code-behind method. At the moment I'm leaning toward Prism, but mainly because it seems to have the most complete documentation. Or will we be taking a step to far, and should stick to code-behind until we have the experience?

        V Offline
        V Offline
        Vincent Beek
        wrote on last edited by
        #3

        Have you heard about: Catel

        C 1 Reply Last reply
        0
        • P Pete OHanlon

          MVVM Light now comes with training from Pluralsight. It's a good place to start.

          C Offline
          C Offline
          cjb110
          wrote on last edited by
          #4

          I saw that, have you done the course? MVVMLight looked fairly good, enough to do it, without too much to digest. The VS snippets and templates where a nice help too.

          P 1 Reply Last reply
          0
          • V Vincent Beek

            Have you heard about: Catel

            C Offline
            C Offline
            cjb110
            wrote on last edited by
            #5

            Thanks, looking at it now, certainly seems to be aimed at the type of apps we'll be creating. I like the emphasis on documentation too.

            1 Reply Last reply
            0
            • C cjb110

              I saw that, have you done the course? MVVMLight looked fairly good, enough to do it, without too much to digest. The VS snippets and templates where a nice help too.

              P Offline
              P Offline
              Pete OHanlon
              wrote on last edited by
              #6

              I haven't done the course - primarily because I know MVVM Light pretty much inside out, and Laurent is using some of my codebase in there already. That reminds me, I really must poke him to update the attribution list to point back to my entries.

              1 Reply Last reply
              0
              • C cjb110

                What of the many MVVM frameworks would be recommended for a team that wants to start developing WPF/SL apps? As a background the team is mainly experienced in VB6/Access VBA, and a lot of TSQL knowledge as well. Obviously we have a lot to learn, but I'm not sure we want to start on the wrong step and start with the code-behind method. At the moment I'm leaning toward Prism, but mainly because it seems to have the most complete documentation. Or will we be taking a step to far, and should stick to code-behind until we have the experience?

                M Offline
                M Offline
                Mycroft Holmes
                wrote on last edited by
                #7

                I'm another vote for MVVM Lite from Galasoft, we were lucky enough to start with that before most of the others appeared. You do know the Silverlight is dead, MS are no longer extending it and it has and EOL in 2022 or thereabouts.

                Never underestimate the power of human stupidity RAH

                C 1 Reply Last reply
                0
                • C cjb110

                  What of the many MVVM frameworks would be recommended for a team that wants to start developing WPF/SL apps? As a background the team is mainly experienced in VB6/Access VBA, and a lot of TSQL knowledge as well. Obviously we have a lot to learn, but I'm not sure we want to start on the wrong step and start with the code-behind method. At the moment I'm leaning toward Prism, but mainly because it seems to have the most complete documentation. Or will we be taking a step to far, and should stick to code-behind until we have the experience?

                  S Offline
                  S Offline
                  Stein Borge
                  wrote on last edited by
                  #8

                  First of all, what type of application are you creating? Do you know why you are doing MVVM? A lot of people throw around 'it's great/separation of concerns etc.' without properly taking advantage of underlying strengths of the pattern. Unless you are creating massive applications with big managed teams, skip Prism. I'd go with Caliburn Micro or MVVMLight.. Before making a decision you should create a basic application with a couple of forms, one with one to many/parent child data, a lot of buttons/menus and throw in some mouse/drag click events. This may sound trivial from a traditional Access/VB6 form perspective but can take a lot of work to function successfully in MVVM. You might want to look at this library I did to take out a lot of the pain associated with MVVM https://github.com/steinborge/ProxyTypeHelper While not strictly a framework it greatly simplify view model creation. It works with PRISM and should work with other frameworks. It still maintains full MVVM i.e. no strong couple of view or view model. The following code demonstrates a viewmodel using the library, using the traditional method would be a lot more code.

                  public string FirstName {get;set;}
                  public string LastName {get;set;}

                  //FullName property changed event fires if FirstName or LastName
                  [LinkToProperty("FirstName")] [LinkToProperty("LastName")]
                  public string FullName
                  {
                  get
                  {
                  return String.Format("{0} {1}", FirstName, LastName);
                  }
                  }

                  [PropertyChangedEvent]
                  void person_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
                  {
                  //do something
                  }

                  //call this method if RollBackChangesCommand command fires in view
                  [LinkToCommand("RollBackChangesCommand")]
                  private void btnRollBackChanges()
                  {
                  }

                  //link to view's data grid AddingNewItem event
                  [LinkToEvent("AddingNewItemEvent")]
                  private void DataGrid_AddingNewItem(AddingNewItemEventArgs e)
                  {
                  }

                  C 1 Reply Last reply
                  0
                  • M Mycroft Holmes

                    I'm another vote for MVVM Lite from Galasoft, we were lucky enough to start with that before most of the others appeared. You do know the Silverlight is dead, MS are no longer extending it and it has and EOL in 2022 or thereabouts.

                    Never underestimate the power of human stupidity RAH

                    C Offline
                    C Offline
                    cjb110
                    wrote on last edited by
                    #9

                    I am worried about Silverlight, but has there actually been an official announcement of its EOL? I was leaning towards Silverlight as it can do desktop client and also be easily web hosted too. Given that most of our apps are Access 97 and VB6, and were still on XP...with Win7 maybe appearing next year. The Win Store apps are a no go, and I've not seen any actual Win Store apps that aren't glorified web pages.

                    M 1 Reply Last reply
                    0
                    • S Stein Borge

                      First of all, what type of application are you creating? Do you know why you are doing MVVM? A lot of people throw around 'it's great/separation of concerns etc.' without properly taking advantage of underlying strengths of the pattern. Unless you are creating massive applications with big managed teams, skip Prism. I'd go with Caliburn Micro or MVVMLight.. Before making a decision you should create a basic application with a couple of forms, one with one to many/parent child data, a lot of buttons/menus and throw in some mouse/drag click events. This may sound trivial from a traditional Access/VB6 form perspective but can take a lot of work to function successfully in MVVM. You might want to look at this library I did to take out a lot of the pain associated with MVVM https://github.com/steinborge/ProxyTypeHelper While not strictly a framework it greatly simplify view model creation. It works with PRISM and should work with other frameworks. It still maintains full MVVM i.e. no strong couple of view or view model. The following code demonstrates a viewmodel using the library, using the traditional method would be a lot more code.

                      public string FirstName {get;set;}
                      public string LastName {get;set;}

                      //FullName property changed event fires if FirstName or LastName
                      [LinkToProperty("FirstName")] [LinkToProperty("LastName")]
                      public string FullName
                      {
                      get
                      {
                      return String.Format("{0} {1}", FirstName, LastName);
                      }
                      }

                      [PropertyChangedEvent]
                      void person_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
                      {
                      //do something
                      }

                      //call this method if RollBackChangesCommand command fires in view
                      [LinkToCommand("RollBackChangesCommand")]
                      private void btnRollBackChanges()
                      {
                      }

                      //link to view's data grid AddingNewItem event
                      [LinkToEvent("AddingNewItemEvent")]
                      private void DataGrid_AddingNewItem(AddingNewItemEventArgs e)
                      {
                      }

                      C Offline
                      C Offline
                      cjb110
                      wrote on last edited by
                      #10

                      The apps are usually basic LoB CRUD apps, outputting to word/excel is fairly common, occasional imports of raw data etc. Most a small team users, though there are a few where that team is spread about the country. Their lifetime is fairly long with not a massive amount of regular change, most apps will be <1 release per year, and some have never changed in the 10 years I've worked here. I have seen others that point out for simple apps MVVM isn't a requirement, but I don't think we're big enough to support multiple types of approach. So although MVVM could be overkill for some apps, at least they'd all be consistent.

                      S 1 Reply Last reply
                      0
                      • C cjb110

                        I am worried about Silverlight, but has there actually been an official announcement of its EOL? I was leaning towards Silverlight as it can do desktop client and also be easily web hosted too. Given that most of our apps are Access 97 and VB6, and were still on XP...with Win7 maybe appearing next year. The Win Store apps are a no go, and I've not seen any actual Win Store apps that aren't glorified web pages.

                        M Offline
                        M Offline
                        Mycroft Holmes
                        wrote on last edited by
                        #11

                        I'm pretty sure there has been an official announcement of the EOL. If you don't actually need the web browser IE the apps are completely behind the firewall the WPF/WCF/Click once is a solution, it is the one I will be pushing. The reason we went to Silverlight was that it allows a very rich UI, the bonus is that once you have a reasonable depth on it is it FAST. It took us a year to get really conversant and develop our framework (code generator for stored procs and the WCF, build up a good set of snippets and styles, standardise our navigation) which allows us to push out an app at least twice as fast as an MVC developer and the UI is mush richer and faster performance. The idea that you can code once and deploy on multiple form factors is still a ways off I believe, so I'm comfortable with WPF and a separate code base for any mobile requirements that come along. If you wxpect a mobile requirement it may be worth researching your data transport style (collections/json/odata etc) to make sure you don't end up needing a different service layer for mobile.

                        Never underestimate the power of human stupidity RAH

                        1 Reply Last reply
                        0
                        • C cjb110

                          The apps are usually basic LoB CRUD apps, outputting to word/excel is fairly common, occasional imports of raw data etc. Most a small team users, though there are a few where that team is spread about the country. Their lifetime is fairly long with not a massive amount of regular change, most apps will be <1 release per year, and some have never changed in the 10 years I've worked here. I have seen others that point out for simple apps MVVM isn't a requirement, but I don't think we're big enough to support multiple types of approach. So although MVVM could be overkill for some apps, at least they'd all be consistent.

                          S Offline
                          S Offline
                          Stein Borge
                          wrote on last edited by
                          #12

                          Here are a few more thoughts.. You don't need any of the aforementioned libraries to implement MVVM - it's just without some of their features UI interaction (even something as a simple as displaying a message box) and communication between modules can be difficult. Another option is WPF Application Foundation. https://waf.codeplex.com It's not being supported but provides some excellent documentation and samples on a concept of passing a IView interface to the view model: https://waf.codeplex.com/wikipage?title=Model-View-ViewModel%20Pattern&referringTitle=Home This allows you to call view (UI) operations from the view model without violating MVVM. My experience with Prism is version 4, which has been out for years. It's kinda of a all or nothing approach. But Prism 5 breaks it out into separate parts - so you could use the MVVM library and not the Composition library. And as you mentioned it has excellent documentation.

                          G 1 Reply Last reply
                          0
                          • S Stein Borge

                            Here are a few more thoughts.. You don't need any of the aforementioned libraries to implement MVVM - it's just without some of their features UI interaction (even something as a simple as displaying a message box) and communication between modules can be difficult. Another option is WPF Application Foundation. https://waf.codeplex.com It's not being supported but provides some excellent documentation and samples on a concept of passing a IView interface to the view model: https://waf.codeplex.com/wikipage?title=Model-View-ViewModel%20Pattern&referringTitle=Home This allows you to call view (UI) operations from the view model without violating MVVM. My experience with Prism is version 4, which has been out for years. It's kinda of a all or nothing approach. But Prism 5 breaks it out into separate parts - so you could use the MVVM library and not the Composition library. And as you mentioned it has excellent documentation.

                            G Offline
                            G Offline
                            Geert van Horrik
                            wrote on last edited by
                            #13

                            Yes, in theory you don't need anything. My experience with this is that people that go this way end up in rubbish applications because they fall in exactly the same pitfalls everyone falls into. Then the people that recommended that you didn't need anything aren't there to help you out. Please, for your own sake, pick a framework that fits your application. Don't try to re-invent the wheel, these frameworks / toolkits / whatever you like to call them are out there for years and being used in production for years. Just pick one that you like and have a good feeling with and that fits you use-cases. If you have a light-weight app, mvvm light can do everything you need and is probably a good option. If you need more (such as authentication, behaviors, nested user controls, resolve by naming convention, etc), pick something that supports that (for example, Catel[^]). Another tip: don't pick an abandoned project if you want to use if for LoB applications. You'll end up fixing someone else's code that isn't maintained any longer.

                            L 1 Reply Last reply
                            0
                            • G Geert van Horrik

                              Yes, in theory you don't need anything. My experience with this is that people that go this way end up in rubbish applications because they fall in exactly the same pitfalls everyone falls into. Then the people that recommended that you didn't need anything aren't there to help you out. Please, for your own sake, pick a framework that fits your application. Don't try to re-invent the wheel, these frameworks / toolkits / whatever you like to call them are out there for years and being used in production for years. Just pick one that you like and have a good feeling with and that fits you use-cases. If you have a light-weight app, mvvm light can do everything you need and is probably a good option. If you need more (such as authentication, behaviors, nested user controls, resolve by naming convention, etc), pick something that supports that (for example, Catel[^]). Another tip: don't pick an abandoned project if you want to use if for LoB applications. You'll end up fixing someone else's code that isn't maintained any longer.

                              L Offline
                              L Offline
                              Lost User
                              wrote on last edited by
                              #14

                              I couldn't disagree more! My experience is that often people who use a framework spend a great deal of their time trying to find out how to work around ways the framework's limitations in order to do something that would be relatively simple. Of course, documentation and training is the key - if you and the team are allowed the time to learn a framework properly before using it in a real development, then all can be good, but that learning / experimenting time can equally well be spent learning the basics from the ground up and developing the features your project actually needs. Another issue with frameworks can be the need to modify the framework in some way in order to do what is required - and then suffering because one cannot update to the latest version of the framework without some angst. MVVM isn't really that hard - it's far simpler than many of the frameworks out there. And developing your own allows you to pick and choose features from other frameworks at will.

                              PooperPig - Coming Soon

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups