【发布时间】:2021-11-01 08:28:46
【问题描述】:
我的解决方案中有一个名为 GCode 的 Prism 模块项目。
在这个模块中,我有多个视图:GCodeView、MenuView、GCodeEditorView、GCodeProductionView
GCodeView 是这个模块的主视图,带有GCodeViewModel,
在GCodeModule.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 上的区域。如您所见,我对GCodeEditorView 和GCodeProductionView 使用相同的GCodeEditorViewModel。
我在MenuView 上有一个ToggleButton,它将GCodeEditorView 和GCodeProductionView 切换到我的“ContentRegion”。
private void ExecuteModeSwitchCommand(bool? isChecked)
{
if(isChecked == true)
{
_regionManager.RequestNavigate(GCodeRegionNames.ContentRegion, nameof(GCodeEditorView));
}
else
{
_regionManager.RequestNavigate(GCodeRegionNames.ContentRegion, nameof(GCodeProductionView));
}
}
在应用程序启动时,GCodeEditorViewModel 触发构造函数 - 没关系 - 但在第一次 RequestNavigate 到 GCodeProductionView 时,构造函数再次触发。之后来回切换不再触发构造函数。这就是目标,但我不确定为什么它会触发两次。
整个目标是 - 也许我正在从不同的方式接近 - 是让这个模块具有一个菜单视图和两个其他视图(生产/编辑器)“模式”来查看相同的“GCode”文件。
注意:GCodeProductionView 我正在使用ListBox 来显示“GCode”文本文件中的行。在GCodeEditorView 上使用TextBox 来显示“GCode”文本以便能够编辑。我知道我可以在ListBox 中进行编辑,但是如果用户在编辑ListBoxItem 期间在任意位置按回车键,我该如何添加新行?
【问题讨论】: