Close Modal -- ViewModel-View Naming Conventions

Sep 16, 2010 at 3:19 AM
Edited Sep 16, 2010 at 5:04 AM


Been using Micro (SL) for a few weeks now, and so far its been awesome.

I'm having a small issue around the naming conventions used to create a ViewModels View. What I have done is created a generic control/view that I want to be able to use against a number of ViewModels and so obviously the VMs have various names which do not quite match the required convention and the ViewLocator fails to load a view to bind against.

EDIT: Probably need to explain this a little more and describe what I have tried. The view that I am showing/wanting to show is opened as a modal window (I had it working in the base case where I had just the view and a single view model. I have extended it by creating further ViewModels which allow the View to provide different sets of data and this is where I have found the problem). I have implemented an OpenModalResult IResult based on other samples in the wild (execute gets hold of window manager and uses show dialog to open the view). I have attempted to override GetView provided by Screen to get around the problem, which works fine if not using a Modal view becuase the Parent is in place and Close works fine. However when using Modal this doesn't work as TryClose gets a reference to my View rather than the ChildWindow it is hosted in and therefore cannot call Close. Here is the GetView override I have tried (I do feel that this is totally the wrong way of solving this problem but its the most logical place I could find so far)

public override object GetView(object context)
    var view = new AdvancedSearchView(); 
    AttachView(view, context);
    return view;
Hope this clarifies things a bit...


What would be the best approach to working around this?

Sep 16, 2010 at 3:18 PM

I recommend that you replace the implementation of ViewLocator.LocateForModelType  Implement some interface on your VMs or mark them with an something that allows you to identify them. Then in your custom implementation, determine if it is the special case. If so, create the custom view and return it. If not, call the default implementation.

Sep 16, 2010 at 9:51 PM

Rob, that worked like a charm and too easy!!! Kind of embarrassed I missed it, once you pointed it out it was so obvious :)