I am having a hard time getting multiple views to work against 1 viewmodel. I have read Naming Convention for Multi-View Support without getting much out of it, and have tri
As far as I can tell from the documentation you are referring to, you should not use View in your view name. Name your view classes People.Grid and People.List instead.
Anders is correct, there are a number of default conventions for Caliburn.Micro
, one of them will locate and display <RootNS>.Views.[<ChildNS>].<ViewTypeName>
for <RootNS>.ViewModels.[<ChildNS>].<ViewModelTypeName>
.
In your case, for a single View
(assuming the classes reside in namespaces derived from the folders):
<RootNS>.Views.PeopleView
would by located and displayed for <RootNS>.ViewModels.PeopleViewModel
.
For multiple views over the same viewmodel, the convention is that views of format <EntityName>.<Context>
are displayed for viewmodels of format <EntityName>[<ViewSuffix>]ViewModel
:
From your example, you could create a new folder named People
, and inside it, create your views named Grid
and List
.
Your namespaces become <RootNS>.Views.People.Grid
and <RootNS>.Views.People.List
and, should then be located and displayed for <RootNS>.ViewModels.PeopleViewModel
.
You typically then display the Views
in something like a ContentControl
, choosing the View
you want to display by setting the cal:View.Context
property. You'll either hard code the name, if the context isn't going to change in that particular control, or bind to a property which describes what state the ViewModel
should be displayed as.
e.g.
<ContentControl cal:View.Model="{Binding Path=ActiveItem}"
cal:View.Context="List" />
See the Multiple Views over the Same ViewModel section.