我有一个基本的ViewModel和关联的View。我也有多个从基本ViewModel派生的ViewModel,但是我想使用基本View进行显示。

基本ViewModel和 View :

  • 虚拟机:MyCompany.MyApp.Modules.Wizard.ViewModels.WizardViewModel
  • vw:MyCompany.MyApp.Modules.Wizard.Views.WizardView

  • 源自WizardViewModel:
  • 虚拟机:MyCompany.MyApp.Modules.NewSpec.ViewModels.NewSpecViewModel : WizardViewModel
  • vw :(映射到MyCompany.MyApp.Modules.Wizard.Views.WizardView)
  • 虚拟机:MyCompany.MyApp.Modules.NewSpec.ViewModels.NewMaterialViewModel : WizardViewModel
  • vw :(映射到MyCompany.MyApp.Modules.Wizard.Views.WizardView)

  • 我认为使用ViewLocator or ViewModelLocatorNameTransformer中的映射应该有可能,但是我还没有弄清楚。

    我正在将Gemini FrameworkCaliburn.Micro v1.5.2一起使用(我计划很快升级到v2)。

    这是我尝试过的事情之一:
    public class NewSpecViewModel : WizardViewModel
    {
        // ...
        static NewSpecViewModel()
        {
            // Escape the '.' for the regular expression
            string nsSource = typeof(NewSpecViewModel).FullName.Replace(".", @"\.");
            string nsTarget = typeof(WizardViewModel).FullName;
            nsTarget = nsTarget.Replace("WizardViewModel", "Wizard");
            // nsSource = "MyCompany\\.MyApp\\.Modules\\.NewSpec\\.ViewModels\\.NewSpecViewModel"
            // nsTarget = "MyCompany.MyApp.Modules.Wizard.ViewModels.Wizard"
            ViewLocator.AddTypeMapping(nsSource, null, nsTarget);
        }
        // ...
    }
    

    P.S.我知道已有向导向导框架(Extended WPF ToolkitAvalon Wizard等),但是我不想添加其他第三方程序集,并且Extended WPF Toolkit向导无法正常工作。

    P.P.S.我还想在其他地方使用这种样式的基本ViewModel/View映射。

    最佳答案

    这是正确的[a链接](https://caliburnmicro.codeplex.com/discussions/398456)。

    编辑:由于codeplex关闭,这是来自讨论的代码:

    var defaultLocator = ViewLocator.LocateTypeForModelType;
    ViewLocator.LocateTypeForModelType = (modelType, displayLocation, context) =>
    {
        var viewType = defaultLocator(modelType, displayLocation, context);
        while (viewType == null && modelType != typeof(object))
        {
            modelType = modelType.BaseType;
            viewType = defaultLocator(modelType, displayLocation, context);
        }
        return viewType;
    };
    

    关于c# - 将派生的ViewModels映射到Caliburn.Micro中的基类View,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24764701/

    10-17 00:09