如何组织ViewModel和View项目以使用View.Context切换?

时间:2014-03-14 16:43:36

标签: xaml caliburn.micro

我在单独的项目中有我的视图和视图模型,我使用ViewLocator.AddNamespaceMapping()调用来映射所有内容。

如何继续保持独立并使用建议的{。{3}} View.Context切换?

假设我的viewmodel项目包含顶级功能文件夹:

MyViewModels /
            --- / FormDesigner / FormDesignerViewModel.cs
            --- / GroupDesigner / GroupDesignerViewModel.cs
            --- / FilterDesigner / FilterDesignerViewModel.cs
            等

我的观点项目如下:

MyViews /
            --- / FormDesigner / FormDesignerView.xaml
            --- / GroupDesigner / GroupDesignerView.xaml
            --- / FilterDesigner / FilterDesignerView.xaml

我目前在我的Bootstrapper中映射如下:

ViewLocator.AddNamespaceMapping(“MyViewModels”,“MyViews”);

我如何为每个当前的Xaml视图引入View.Context切换备用视图?感谢

1 个答案:

答案 0 :(得分:0)

我认为内置的约定会为您处理(您还可以指定其他约定),前提是您的视图已正确命名/命名(See "Multiple Views over the Same ViewModel")

通常,您可以在以下结构中放置视图(如果要切换):

Folder:    Views/FormDesigner/         // Folder Structure not critical
NameSpace: YourApp.Views.FormDesigner
XAML:      YourApp.Views.FormDesigner.Master.Xaml
XAML:      YourApp.Views.FormDesigner.Detail.Xaml
Binding:   <ContentControl cal:View.Model="{Binding Path=ActiveItem}" 
               cal:View.Context="Master" />

您的绑定可能会有所不同,对于切换,您需要将Context绑定到ViewModel上的属性(在您的情况下指示MasterDetail

您可以使用现有视图,但如果要切换上下文,则必须更改FormDesignerView.xaml的名称。

我很难解释在这个答案中管理这种行为的内置Caliburn.Micro惯例:One ViewModel, multiple views