棱镜导航与多个视图相同的视图模型



我的解决方案中有一个名为GCode的Prism模块项目。 在这个模块中,我有多个视图:GCodeViewMenuViewGCodeEditorViewGCodeProductionView

GCodeView是该模块的主视图,带有GCodeViewModelGCodeModule.cs我正在将其添加到另一个项目中的区域。

public class GCodeModule : IModule
{
private readonly IRegionManager _regionManager;
public GCodeModule(IRegionManager regionManager)
{
_regionManager = regionManager;
}
public void OnInitialized(IContainerProvider containerProvider)
{
_regionManager.RegisterViewWithRegion(RegionNames.GCodeRegion, typeof(GCodeView));
_regionManager.RequestNavigate(GCodeRegionNames.MenuRegion, nameof(MenuView));
_regionManager.RequestNavigate(GCodeRegionNames.ContentRegion, nameof(GCodeEditorView));
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<MenuView, MenuViewModel>();
containerRegistry.RegisterForNavigation<GCodeEditorView, GCodeEditorViewModel>();
containerRegistry.RegisterForNavigation<GCodeProductionView, GCodeEditorViewModel>();
}
}

MenuView添加到GCodeView上的区域。如您所见,我对GCodeEditorViewGCodeProductionView使用相同的GCodeEditorViewModel

我有一个关于MenuViewToggleButton,可以将GCodeEditorViewGCodeProductionView切换到我的"内容区域"。

private void ExecuteModeSwitchCommand(bool? isChecked)
{
if(isChecked == true)
{
_regionManager.RequestNavigate(GCodeRegionNames.ContentRegion, nameof(GCodeEditorView));
}
else
{
_regionManager.RequestNavigate(GCodeRegionNames.ContentRegion, nameof(GCodeProductionView));
}
}

在应用程序启动时,GCodeEditorViewModel会触发构造函数 - 没关系 - 但是在第一次RequestNavigateGCodeProductionView时,构造函数会再次触发。之后,切换回一个第四个不再触发构造函数。这就是目标,但我不确定为什么它会发射两次。

整个目标是 - 也许我是从另一种方式接近的 - 是让这个模块带有菜单视图和另外两个视图(生产/编辑器)"模式"来查看相同的"GCode"文件。

注意:GCodeProductionView我正在使用ListBox来显示"GCode"文本文件上的行。在GCodeEditorView使用TextBox显示"GCode"文本以便能够编辑。我知道我可以在ListBox中编辑,但是如果用户在编辑ListBoxItem期间在任何地方按回车键,我该如何添加新行?

GCodeModule.RegisterTypes中,在执行其他注册之前将视图模型注册为单例。 这应该使它只构造一次。

换句话说,让这成为你的第一行

containerRegistry.RegisterSingleton<GCodeEditorViewModel>();

相关内容

  • 没有找到相关文章

最新更新