I'm currently working on a .NET application. Usually I haven't bothered much with actually learning the framework but this time I decided it's worth the effort. I decided to go with WPF instead of Winforms, and EF instead of the traditional SQL methods.

I was reading up on MVVM and UI design with WPF when I happened upon Prism. It's essentially a library for building applications with nice UIs in WPF. It focuses on separation of concerns when designing the application.

Has anyone used Prism before, and what are your comments on it? When building WPF applications, do you usually use the standard tools or do you employ libraries like Prism? Has MVVM been worth the overhead, in practice?

Sidenote: any tips for someone getting started with this stuff are appreciated. I've noticed an annoying thing about WPF tutorials. They're mostly videos! I don't want to watch a video! I can read the manual/tutorial/book in half the time it takes for it to load and finish.
Right,

First of all, I commend you on bringing this topic up. It's quite rare to see people starting to employ a design pattern early on when dealing with WPF. MVVM is the design pattern that is adopted within WPF and SL, mainly because of the WPF extremely powerful binding mechanism. There are several MVVM frameworks out there that do a tremendous job namely the MVVM Light Toolkit. I will not dig deep into the benefits of MVVM, i presume you've already done your share of research, but if you need some additional information, i'd be glad to assist you.

Prism, in itself, is a compositing framework that promotes the MVVM design pattern. However, it tackles it in an incredibly powerful manner. It builds on existing very powerful concepts but brings them together to form a tremendous way of building modularized applications. Features like Inversion of Control (through Unity), commanding, messaging (through EventAggregator), placements (through Regions) and the lot.

Prism is all positives but one negative, it a steep learning curve and you might fall into pit holes when building applications, if you do not know the reasoning behind a certain feature being available to you. Nevertheless, using Prism is far better than not.

In the end, the advice i would give you is the following, if the features of Prism are frightening to you and you do not understand the reasoning behind each and your application isn't large enough to require it, go with MVVM Light Toolkit. It's quite powerful and builds on the exact same concepts, bar IoC. Though that's not a big deal because you could incorporate your favorite one (Unity, Ninject, Windsor...).

P.S.: Yes we use Prism.

Good luck.
Thank you for the advice, xterm. I took a look at MVVM Light, and I decided that under my time constraints it would be better for me to go with that instead of Prism. I'm putting Prism on my to-learn list since I can see that it's really powerful.

So far I'm having a lot of fun designing and coding around WPF, it just feels more natural than Windows Forms. My next big step will be to implement something similar to Prism's Regions and RegionManager because I'd really like to be able to switch through different views in one window without creating a new window or navigating to a page. I'll post my results (or hopeless mess) in a new thread tomorrow!
It's much fun!

The utmost benefit is that knowing WPF would implicitly mean that you are versed in SL and WP7 :-)

Good luck on your project and keep us in the loop.

Don't hesitate to post questions.
WPF has been on my "to-learn" list for quiet some time now. I already downloaded a video training series from appdev.com and a couple of videos from channel9. I will definitely get into it right after I'm done with my current project, in which I'm using ASP.NET MVC.
3 months later
Ok I've been watching the WPF videos over the past few days (finally!) and I'm impressed with the power of WPF but disappointed with how it's a complete mess - at least from what I've seen so far. XAML is nice but it gets tightened up to the data once data binding kicks in. I prefer to provide the data needed to render the view in code rather than in the mark-up itself.

Moreover, the way Resources are used worries me. You can declare a Resource at different levels - in the parent, grandparent or even in external files (which is a nice feature in itself though). This might end up being a pain in the ass when it comes to maintenance.

Now I'm hoping MVVM libraries (such as Prism) would deal with the issues mentioned above (and I assume they do). So if you guys got some recommended material to get me started with Prism I'd be very thankful.
Kassem wroteOk I've been watching the WPF videos over the past few days (finally!) and I'm impressed with the power of WPF but disappointed with how it's a complete mess - at least from what I've seen so far. XAML is nice but it gets tightened up to the data once data binding kicks in. I prefer to provide the data needed to render the view in code rather than in the mark-up itself.
WPF is not limiting, you get to choose what to do and how to do it. It's far cleaner than other alternatives and that includes web development paradigms
Moreover, the way Resources are used worries me. You can declare a Resource at different levels - in the parent, grandparent or even in external files (which is a nice feature in itself though). This might end up being a pain in the ass when it comes to maintenance.
You will rarely declare resources on a control level, you almost always declare them in a dictionary (external for reuse, internal if not going to be reused) and just access them through keys
Now I'm hoping MVVM libraries (such as Prism) would deal with the issues mentioned above (and I assume they do). So if you guys got some recommended material to get me started with Prism I'd be very thankful.
I think it's better if you deal with WPF without external libs and eventually build your own minified mvvm framework.

Either way, i'll be glad to provide you with some tips and at night i'll toss in a small sample.
I agree with xterm that you can do MVVM with WPF even without an external framework. If you're learning the paradigm as I was when I started, then MVVM Light is really good since you can understand the internal workings easily.

As for resources, I actually think the different visibility levels of resources are an intentional feature. Some resources may only be relevant to a particular view, so it wouldn't make sense to declare them on a "global" scale. I think of it as information hiding applied to design elements. I may be wrong on this though, I appreciate a correction if that's the case.