Sorry if my answer became a little lenghty, but don't blame me! Your question is lengthy as well.
In summary, MVVM is not pointless.
The clear case in point is adding
support for a Modal dialog box. The
correct way is to put up a dialog box
and tie it to a view model. Getting
this to work is difficult.
Yes, it truly is.
However, MVVM provides you a way for separating the UI's appearance from its logics. Noone forces you to use it everywhere, and noone is holding a gun against your forehead to make you create a separate ViewModel for everything.
Here is my solution for this particular example:
How the UI handles a certain input is none of the ViewModel's business. I would add code to the View's .xaml.cs file, which instantiates the dialog box and sets the same ViewModel instance (or something else, if needed) as its DataContext.
In order to benefit from the MVVM pattern, you have to distribute code in several places throughout the layers of your application. You also have to use esoteric programming constructs like templates and lamba expressions.
Well, you don't have to use it in several places. This is how I would solve it:
- Add the XAML to the View, and nothing in the .xaml.cs
- Write every app logic (except the stuff that would directly operate with UI elements) inside a ViewModel
- All the code that should be done by the UI but has nothing to do with business logic goes into the .xaml.cs files
I think that the purpose of MVVM is primarily to separate the logic of the application and the concrete UI, therefore enabling easy modifications (or complete replacement) of the UI.
I use the following principle: the View can know and assume anything it wants from the ViewModel, but the ViewModel can know NOTHING about the View.
WPF provides a nice binding model which you can use to achieve exactly that.
(BTW, templates and lambda expressions aren't esoteric if used right. But if you don't want to, don't use them.)
Stuff that makes you stare at the screen scratching your head.
Yeah, I know the feeling. Exactly what I was feeling when I first saw MVVM. But once you get the hang of it, it won't feel bad anymore.
I had an about box working fine ...
Why would you put a ViewModel behind an about box? No point in that.
Most of the MVVM toolkits gloss over dialogs and when they do address them, they are just alert boxes that don’t require custom interfaces or view models.
Yes, because the very fact that a UI element is in the same window, or another window, or is orbitting Mars at the moment is none of the ViewModels' concern.
Separation of Concerns
EDIT:
Here's a very nice video the title of which is Build your own MVVM framework. It's worth watching.