Foreword
Rich client development remains one of the most popular forms of application development, both from a user and a developer point of view. While nobody denies the importance of thin-client interface technologies such as HTML(5), it is clear that consumers and enterprises alike enjoy using applications that provide a rich, powerful, productive, and sometimes fun experience. Evidence ranges from the current App Craze on mobile devices to the long-running history of rich business applications deployed by many businesses of all sizes. Many of the most successful applications and systems, measured in commercial success and/or popularity, are either entirely based on Rich Client technology or make Rich Clients part of the mix.
If you are a Microsoft developer (and if you are reading this book, the chances are that you are), you find yourself in the lucky position of getting a chance to use one of the best, if not the best, sets of Rich Client development technologies and tools. The paradigm first introduced by WPF (then known under its Avalon code name) and the XAML declarative approach have turned out to be a super-productive, highly maintainable, and highly reusable approach. The technologies are easy to use once the developer gets acquainted with the ideas behind the setup of XAML-based systems. It is true that there is a learning curve. As an industry, we have used the same UI development paradigm across many languages, systems, and even platforms for a very long period of time, reaching back all the way to MS DOS. The drop a control on a form, set a few properties, and wire up some event handlers approach can be found almost universally in pre-XAML scenarios ranging from Visual Basic, to C++, PowerBuilder, Delphi, Visual FoxPro, .NET Windows Forms, ASP.NET WebForms, even standalone HTML scenarios, and many more. XAML breaks that mold. Yes, you can still employ the old paradigm, but you can reap significant benefits by following the new ideas. By reading this book, you are well on your way down that path, and you will find that while there is a hump in the learning curve you need to get over, there also is a significant downward slope on the other side of that hump. While many environments retain a high level of difficulty even once you achieve a high degree of familiarity, WPF is different in that things tend to be pretty straightforward once you know how to do things the right way.
WPF has become the de-facto standard for Windows Desktop Application development. It is now a well-established technology that has superseded the older Windows Forms (WinForms) framework. Microsoft uses WPF in many of its own products and WPF has been continually developed for a number of years and across a number of versions and major releases. While other development environments may be flashier, and technologies like HTML5 get the limelight, I can tell based on personal experience that WPF seems to be a secret hot technology. This may be anecdotal evidence based on my own experiences only, but my experience draws on my interactions not just with our consulting and custom software customers, but also on the interactions with a hundreds of people who attend training classes we teach, thousands of people I interact with at various developer events, and the tens of thousands of people I interact with one way or another as readers of CODE Magazine.
In short, WPF is a very popular development environment that is used for a large number of highly strategic development projects. WPF developers are also highly sought after. While there may not be a need for as many WPF developers as there is for HTML developers, the demand for WPF developers is much higher. In other words, while the world generally needs more HTML developers and designers than WPF equivalents, there is no shortage of those HTML skills. I do not mean to take anything away from the many highly skilled HTML experts (and the same goes for many other platforms and technologies). However, those skills are relatively easily available. WPF skills, on the other hand, are much harder to come by and thus represent a more valuable expertise. Skilled WPF developers routinely command a higher salary or hourly rate. A fact you are probably happy to learn if you are interested in reading this book. ;-)
While this book focuses on WPF, many of the things you learn here will serve you well beyond WPF. The XAML Paradigm is of course used in other environments. Silverlight in its original form as a browser plugin is one such example that has grown out of WPF. While browser plugin technology may have seen its best days as far as strategic importance goes, Silverlight still goes down in history as one of the fastest growing and most rapidly adopted developer technologies ever. Silverlight will also be here to stay for some time to come. While I would not recommend starting new projects in Silverlight unless you have a very good and specific reason to do so, you are probably OK using Silverlight for a bit longer if you have already travelled down that path. For new projects, however, I would recommend WPF.
It is important to remember that the ideas behind Silverlight are not just useful in browser plugins. Silverlight for Windows Phone is turning out to be a beautiful and highly productive development environment embraced by developers. For mobile development, one first chooses the platform of course. If that platform is iOS, Apple's development environments and languages are a given. If the platform is Android, one probably ends up with Java. It is too bad one cannot choose Microsoft's version of Silverlight for Windows Phone to develop on any of these other mobile platforms, because I would personally choose it any day over any of the other options based on pure productivity and development joy.
And the story continues. XAML is used as one of the cornerstones in Windows 8's new Metro user interface mode. So everything you learn in this book will be of use to you in the bold new world of Windows 8 development as well. Windows 8 Metro also supports a proprietary development model based on HTML5 and JavaScript, which will be on equal footing with XAML. The jury is still out and it is too early to tell (as I am writing these lines, we are still at least a half a year away from the Windows 8 ship date) but based on what we see at events and from readership reactions through CODE Magazine, people seem to be most interested in the XAML development option. A biased result perhaps (after all, current WPF and Silverlight developers are probably most likely to be the first ones in as far as Metro development goes), but it is still interesting to see that XAML development is alive and well, and expected to enjoy a bright future.
Microsoft is planning to ship Windows 8 with two modes; one known as Metro as well as the more conventional Desktop mode, which largely resembles Windows 7's desktop. Which brings us right back to WPF, because all WPF applications will continue to work just fine in Windows 8's Desktop mode. Either way you turn it, the XAML family of technologies is not a bad family to be part of. We are certainly very happy to base a lot of our efforts on these technologies and have a high degree of comfort moving forward with that approach.
But not all WPF development is created equal. There are a lot of different scenarios and approaches. Some good, some bad. One approach may work well in some scenarios while it doesn't work well at all in others. As in all engineering disciplines, knowing the pros and cons of each tool in the toolbox is an important aspect of engineering know-how. With that said however, it is clear that MVVM is a very valuable pattern for a lot of WPF-based applications (and XAML-based applications, in general). If done right, MVVM leads to a range of different advantages ranging from quality to maintainability, reusability, even developer productivity, and more. As with most powerful tools, the power can be wielded both for good and evil. Yes, it is possible to create horrible monstrosities that are hard and slow to develop and result in inflexible and slow applications. If that is the outcome, the developers and architects did a bad job in evaluating the tools at their disposal and made ill-advised choices in how to wield them. Luckily, the book you are currently reading is going to be a valuable first step in learning how to avoid such mistakes and instead unleash the incredible power of MVVM and many of the associated techniques.
Explaining those details is a task I will leave in the capable hands of the authors of this book. It is my hope that reading it is going to be just one of the many steps in your journey of building XAML-based applications for a long time to come. After all, as a User Interface development and design enthusiast, I can't imagine a UI development environment that is more beautiful and elegant than WPF and XAML.
Markus Egger
Publisher, CODE Magazine
President and Chief Software Architect, EPS Software Corp.
Microsoft Regional Director and MVP