Re: mapping views to view models, I like to use a convention to map view models 
to views (e.g., FooViewModel should expect a .xaml file named FooPage, FooView 
or FooWindow). So you shouldn't have to store the mapping explicitly.

In Magellan with just MVVM it goes something like this:


1.       You tell an INavigator that you want to navigate, specifying:

o   The name of the ViewModel ("foo")

o   Any parameters (customerID=36)

2.       The INavigator maps it to a handler

3.       The MVVM handler resolves the VM from the IOC container

4.       The MVVM handler looks for an Initialize() method on the view mode 
that takes the navigation parameters - e.g.,
public void Initialize(int customerId) {...}

5.       A view is found for the ViewModel based on the conventions above

6.       The view's DataContext is set to the ViewModel

The process is different if you're using MVC controllers, but not too 
different. The VM also implements an IViewAware interface and is notified about 
view lifetime events (e.g., activated, deactivating (closing) and deactivated). 
And each step uses interfaces and strategies to make it easy to plug in to, 
like ASP.NET MVC.

Paul


From: ozwpf-boun...@list.ozwpf.com [mailto:ozwpf-boun...@list.ozwpf.com] On 
Behalf Of Winston Pang
Sent: Wednesday, 3 November 2010 6:03 PM
To: ozDotNet; ozWPF
Subject: MVVM in a navigational paradigm

Hey guys,

I'm trying to apply MVVM in the WPF navigation model.

I was just doing some thoughts around it

Apart from the rule that the view model shouldn't know about the view, how 
would a particular view spawn another view, and push it to the navigation 
service for example? I've been playing around with some ideas of holding a 
mapping between the View and ViewModel in a global list in App. Then have App 
register against the messenger/mediator to respond to any other view model's 
wanting to spawn a new view and navigating it to it. I'm not sure if I'm on the 
right track.

Would love to see how some other people have done it on here?


Thanks.


--Winston

Reply via email to