What is your basic navigation structure for WPF/WinForms/Silverlight/Swing/Cocoa applications?

This is pure feedback and unscientific research for me.  From my own experience and the feedback from other people so far we’re seeing a handful of general navigation or structural paradigms.  I’m genuinely interested in hearing what other people are doing here.

  1. Browser Style Navigation – Only one logical screen is shown and active at a time and it takes over the majority of the window real estate.  I’ve often heard this referred to as “web style navigation” as it’s very similar to the experience you get from a web browser.  You generally tear down the existing screen completely when you’re navigating to a new screen.  I’ve only built one of these myself and I thought they were pretty rare, but I’m seeing a lot of Silverlight or Flex work that uses this paradigm.
  2. “Tabbed MDI” – Visual Studio.Net or Eclipse or IntelliJ are typical examples.  You are hosting the main screens within some sort of tabbed display in the main pane of the application.  You might have additional panes for navigation, actions, or querying around the main pane.  This seems to work best for applications that deal with documents are multiple work items.  Most of the applications I’ve built, including StoryTeller, fall into this paradigm.
  3. Dashboard.  The stock trader example from Prism is what I’m talking about here.  You may potentially have several more or less independent “applets” hosted in different areas in the main window running simultaneously. I’ve never built an application like this (well, except for our new configurable dashboard feature at work), but I’m told that it’s very common.  I think Prism and to a lesser extent, Caliburn, are both built with this paradigm in mind.

I’m assuming nobody is actually building real MDI applications any longer, but you never know.


How about it?  What are you doing?  Anything I missed?


Thank you in advance for your feedback.  I’m receiving a lot of good help from these blog posts.

About Jeremy Miller

Jeremy is the Chief Software Architect at Dovetail Software, the coolest ISV in Austin. Jeremy began his IT career writing "Shadow IT" applications to automate his engineering documentation, then wandered into software development because it looked like more fun. Jeremy is the author of the open source StructureMap tool for Dependency Injection with .Net, StoryTeller for supercharged acceptance testing in .Net, and one of the principal developers behind FubuMVC. Jeremy's thoughts on all things software can be found at The Shade Tree Developer at http://codebetter.com/jeremymiller.
This entry was posted in Uncategorized. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • Florian Fanderl

    Working on MDI with Windows Forms.

    So much people using MDI stuff and so little on the net to read about 😉

  • http://codebetter.com/members/bennage/default.aspx bennage

    I’m a little late to the game, but one significant wpf project we did was MDI. The app is freely available to, if you would like to play with it.


    It does not use Caliburn, but it was part of the fuel for it.

  • http://esamsalah.blogspot.com/ Essam Salah

    here are my last 2 apps:
    #1 Outlook style , with pop up dialogs
    #2 Dashboard based Main Screen, with multiple pop up dialogs that use a breadcrumb to show the parent/child relation of current screen

  • Robert Lewis

    Browser Style Navigation in winForms. We’ve got a few static page elements at the top and bottom, but we replace the central “content panel” every time the user moves to a new “page”. A single MainForm wraps all of this and lasts for the lifetime of the application.

  • Graham


  • http://igorbrejc.net Igor Brejc

    For a couple of years I’ve been developing a pet project WinForms OpenStreetMap mapping application. The first version had a single window. For the next version I integrated some of the stuff you’ve been writing about and developed TDI interface (using DockPanelSuite, http://www.flickr.com/photos/28786233@N03/3642057432/sizes/l/).

    Now I’m working on a complete redesign, which now heavily relies on IoC and has its own TDI framework. I’m trying to merge some of my own ideas with your own. Looking forward to your book.

  • SteveJ

    Swing tabbed MDI, with each tab being of the windows explorer type tree nav or a high-level status board with no nav.

    We tend to shade towards tab overload, unfortunately. Veteran users like dozens of tabs, but it’s overwhelming at a glance.

  • http://codebetter.com/members/jmiller/default.aspx Jeremy D. Miller


    I have built an app like that in ’07 (to capture mortgage backed security trades, I bet it gets a *lot* of usage right now).

    For my purposes, that effectively means zero navigation and I don’t need to worry too much about that.

  • http://www.commongenius.com David Nelson

    I agree with Jeff, I would say there is a 4th option that I will call “Dialog” style. I tend to build relatively small, narrowly focused LOB apps. There is a single main window that shows the data. The user selects data from the main screen and then chooses an action to perform on that data (from a button/menu/context menu). A dialog pops up, the user does their work, then closes the dialog.

    Although I guess you could argue that this kind of application doesn’t actually have any real “navigation” and therefore doesn’t apply to the question asked.

  • Avinash

    Browser Style with CAB

  • Brad

    For the last 3 WPF projects my team has worked on, two have been browser style apps (similar in style to Billy Hollis’ StaffLynx app).
    The last (and largest of our projects has been a tabbed MDI (with a ribbon). Worked great, and our users love it.

    I don’t feel these styles are necessarily mutually exclusive. Dashboards would fit into either of the other two styles; and of course browser styles can easily be housed in a tabbed MDI (see IE, Firefox, etc).

  • Jeff

    What about Outlook style? There are some panes and navigation, but work is generally done in a new window then closed out. I’ve taken this approach for my last project (sales/crm related).

  • http://www.chrisholmesonline.com Chris

    Outlook style, which is just another kind of tabbed MDI really.

  • http://shane.jscconsulting.ca Shane Courtrille

    Current is Browser Style WinForms app
    Last was Tabbed MDI WinForms app

  • http://http//cromwellhaus.com/blogs/ryanc Ryan Cromwell

    I don’t know that Prism is built with the Dashboard/Stock Trader in mind. The samples definitely skew that way, but we are building a Tabbed WPF application with Prism (not exlusively) using what you’ve otherwise called the Screen Activator. We have a Registry service that each module in our application uses to Register their view at which point the Screen Activator pattern takes over.

    The thing we’ve liked is our design firm, Clarity Consulting, has presented alternative paradigms tht aren’t necessarily tabbed. We’ve been able to do prototypes quickly by changing the Region container and adapters. I’ve been pretty happy.

  • http://codedreams.blogspot.com/ Mike Strobel

    Screenshot of the aforementioned Smart Client:

  • http://codedreams.blogspot.com/ Mike Strobel

    Our WPF Smart Client uses a workbench consisting of a tabbed MDI interface and several workbench add-ins (a navigation pad, a contextual actions pane, etc). We also have a browser-style SDI workbench that allows a form to be “torn off” into a new workbench window.

  • http://wizardsofsmart.net/ Ryan Riley

    We are using something like a cross between browser-style and dashboard, if I understand your definitions correctly. We are using Prism with our own custom navigation strategies for resolving new or re-loading existing screens. In the main window, you would see one module at a time, but these can be navigated using a toolbar (from Prism). A lot of our actions are performed with modal windows or wizards. It’s all very similar to Billy Hollis’s StaffLynx

  • http://thedwalker.blogspot.com Thedric Walker

    I recently worked on an app where we used a tabbed mdi mostly.

  • http://michaelstechnical.blogspot.com Michael Hedgpeth

    Tabbed MDI with WPF

  • http://dair-targ-one.livejournal.com/ Dair T’arg

    Recently I’ve been worked on the application having deal with a large amount of different fields at one time. It was designed to do something between browser-style and MDI-style: no menu/menubars but a strong connection between tabs (including data-throwing from one form into another).