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: [email protected] [mailto:[email protected]] 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