gpt4 book ai didi

c# - 将派生 ViewModel 映射到 Caliburn.Micro 中的基类 View

转载 作者:太空狗 更新时间:2023-10-29 23:07:25 24 4
gpt4 key购买 nike

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

基础 View 模型和 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 ViewModelLocator 中的映射来实现或 NameTransformer , 但我还没有弄明白。

我正在使用 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);
}
// ...
}

附言我知道有现有的向导框架( Extended WPF ToolkitAvalon Wizard 等),但我不想添加另一个第 3 方程序集,扩展 WPF 工具包向导无法正常工作。

附言我还想在其他地方使用这种基本 ViewModel/View 映射样式。

最佳答案

这是执行此操作的正确方法的 [链接] ( 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# - 将派生 ViewModel 映射到 Caliburn.Micro 中的基类 View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24764701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com