One ViewModel, multiple views

后端 未结 2 934
谎友^
谎友^ 2020-12-30 12:46

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

相关标签:
2条回答
  • 2020-12-30 13:03

    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.

    0 讨论(0)
  • 2020-12-30 13:07

    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.

    0 讨论(0)
提交回复
热议问题