具有多个视图相同 ViewModel 的棱镜导航

     2023-04-01     84

关键词:

【中文标题】具有多个视图相同 ViewModel 的棱镜导航【英文标题】:Prism Navigation with Multiple View same ViewModel 【发布时间】:2021-11-01 08:28:46 【问题描述】:

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

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 上的区域。如您所见,我对GCodeEditorViewGCodeProductionView 使用相同的GCodeEditorViewModel

我在MenuView 上有一个ToggleButton,它将GCodeEditorViewGCodeProductionView 切换到我的“ContentRegion”。

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 期间在任意位置按回车键,我该如何添加新行?

【问题讨论】:

【参考方案1】:

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

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

    containerRegistry.RegisterSingleton<GCodeEditorViewModel>();

【讨论】:

棱镜:贝壳之间的导航?

...一个应用程序,用户可以像这样导航:红色矩形表示内部具有不同Prism模块的区域(本例中为6个不同的模块)。解决以下问题的最佳方法是什么:AFAIK外壳中的区域不会改变,但我无法通过使用相同的区域创建我想要的不同布局... 查看详情

MVVM + WPF - 为具有多个视图的 ViewModel 设计

】MVVM+WPF-为具有多个视图的ViewModel设计【英文标题】:MVVM+WPF-DesignforViewModelthathasMultipleViews【发布时间】:2019-03-1101:01:33【问题描述】:我开发在各种信息亭上运行的.NET/Winforms应用程序。这些应用程序通常是全屏和触摸控制的。... 查看详情

如何在mvvm中使用相同的viewmodel拥有多个视图?(代码片段)

...新手,在尝试在两个单独的视图中将DataContext设置为我的ViewModel的同一个实例时遇到了一个问题。这是因为:<Window.DataContext><local:ViewModel/></Window.DataContext>将为每个视图创建一个新的视图模型实例。为了解决这个问... 查看详情

如何将视图与viewmodel关联或viewmodel的多个datatemplates?(代码片段)

...我想通过单击每个项目导航到不同的页面。如何导航到与viewmodel关联的视图?在WPF中,有一种方法可以为viewmodel设置多个Datatemplates。<TabControlGrid.Row="1"Margin="0"ItemsSource="BindingTabs"SelectedIndex="0"SelectedItem="BindingSe 查看详情

跨多个视图共享导航栏的最佳方式?

...219:23:58【问题描述】:我有三个视图控制器,我希望它们具有相同的导航栏,但我无法找到在这三个视图之间“共享”导航栏的方法。是否有更有效的方法将导航控制器与视图控制器链接起来,这样即使导航控制器完全相同,我... 查看详情

ViewModel 在导航导航中没有被清除,并且 viewmodel 中的实时数据保持活动状态

】ViewModel在导航导航中没有被清除,并且viewmodel中的实时数据保持活动状态【英文标题】:ViewModelnotgettingclearedinNavigationnavigateandlivedatainviewmodelstaysalive【发布时间】:2020-04-0921:42:44【问题描述】:所以,我已经使用导航实现了具... 查看详情

具有相同根视图的导航控制器

】具有相同根视图的导航控制器【英文标题】:NavigationControllerswiththesamerootview【发布时间】:2014-08-0508:56:45【问题描述】:假设您需要一些需要下一个故事板的功能。例如,您需要根据单击的选项卡上传不同的内容以查看。但... 查看详情

如何使多个视图具有相同的宽度?

】如何使多个视图具有相同的宽度?【英文标题】:HowtomakemultipleViewsthesameWidth?【发布时间】:2011-06-1003:16:04【问题描述】:作为更大UI的一部分,我有一个RelativeLayout,其中包含三个我希望具有相同宽度的视图。三个视图像这样... 查看详情

具有相同模型的主干多个视图

】具有相同模型的主干多个视图【英文标题】:backbonemultipleviewswiththesamemodel【发布时间】:2013-07-1017:30:23【问题描述】:我正在做一个只有主干的前端项目。在某一时刻,我想做以下事情:带有一些输入的基本表单用户提交表... 查看详情

从 ViewModel 弹出导航视图

】从ViewModel弹出导航视图【英文标题】:PopNavigationviewfromViewModel【发布时间】:2019-12-0208:36:28【问题描述】:我正在使用swiftUI并结合,我的虚拟机中有一些业务逻辑。有些结果必须在导航视图堆栈中弹出我的视图。我在某些视... 查看详情

具有相同 XIB 单元格和按钮的多个集合视图

】具有相同XIB单元格和按钮的多个集合视图【英文标题】:MultipleCollectionViewswithsameXIBCellandbutton【发布时间】:2017-01-3012:19:03【问题描述】:我有一个包含多个集合视图的视图控制器。每个集合视图都使用与xib相同的自定义单元... 查看详情

具有多个类的递归树视图

...置我有一个带有ObservableCollection&lt;StructureItem&gt;的ViewModel和一个用于显示它的View。类本身是递归的:publicclassStructureItempublicList<Struct 查看详情

使用相同背景图像的具有多个场景的视图控制器 (UIViewController) 情节提要

】使用相同背景图像的具有多个场景的视图控制器(UIViewController)情节提要【英文标题】:ViewController(UIViewController)Storyboardwithmultiplescenesusingsamebackgroundimage【发布时间】:2016-10-1901:17:43【问题描述】:我正在开发一款游戏,其中第... 查看详情

如何将相同的viewmodel设置为xamarin表单中的新mvvm中的两个视图(代码片段)

...有两个视图添加和编辑视图两个视图是不同的UI但相同的viewmodel。通过使用mvvm,我将两个视图的绑定上下文设置为相同的viewmodel。我是新手mvvm的新手。在新的mvvm中,我不知道如何将相同的viewmodel设置为两个视图。另一个是,我... 查看详情

具有多个表视图的 Ipad 设计

】具有多个表视图的Ipad设计【英文标题】:Ipaddesignwithmultipletableviews【发布时间】:2013-10-2414:25:31【问题描述】:我正在为ipad开发聊天应用程序,我想知道原生消息应用程序。所以一个屏幕上有两个表格视图,但是如何在一个... 查看详情

使用 Auto Layout 创建具有多个不同自定义单元格的 UITableView 具有几乎相同的子视图

】使用AutoLayout创建具有多个不同自定义单元格的UITableView具有几乎相同的子视图【英文标题】:UseAutoLayouttocreateUITableViewwithmultipledifferentcustomcellshavealmostthesamesubviews【发布时间】:2015-10-2920:40:31【问题描述】:我对这个应用程序... 查看详情

iOS、iPad - 具有相同主视图控制器和详细视图控制器的多个拆分视图控制器

】iOS、iPad-具有相同主视图控制器和详细视图控制器的多个拆分视图控制器【英文标题】:iOS,iPad-Multiplesplitviewcontrollerswithsamemasteranddetailviewcontrollers【发布时间】:2014-03-0713:28:48【问题描述】:我有选项卡式应用程序,3个选项卡... 查看详情

Mvc 列出嵌套在 Viewmodel 中的多个视图

】Mvc列出嵌套在Viewmodel中的多个视图【英文标题】:MvcListMultipleViewsNestedinViewmodal【发布时间】:2016-11-2310:01:23【问题描述】:大家好,你能帮我弄清楚如何在单个视图上列出嵌套的视图模型这是我的带有嵌套4个视图的视图模型... 查看详情