【问题标题】:Opening tab with tree node data打开带有树节点数据的选项卡
【发布时间】:2011-09-15 15:54:56
【问题描述】:

你好,
我是 Prism 和 WPF 的新手,我有一个关于在视图之间共享数据的问题。 我正在处理的应用程序类似于 SQL Server Development Studio。 Demo 包含两个区域。第一个区域包含树(如 SQL Server DS 中的对象资源管理器)。树节点绑定到不同的视图模型。例如 DatabaseA->Tables->dbo.TableA->Columns 等。

第二个区域最初是空的。当我双击树节点时,我想打开显示我在树中单击的数据的视图。
详细:
1.双击树节点
2.节点数据并显示在第二个区域
3.如果第二个区域不为空,请检查点击的节点数据是否已经显示在现有标签页之一中
4. 如果没有,则使用单击的节点数据创建新的标签页,否则关注现有的标签页

到目前为止,我设法创建了树。当点击树节点时应用调用:

UriQuery uriQuery = new UriQuery {{"ID", unit.Id.ToString()}};  
uriQuery.Add("TypeName", "Unit");  
var uri = new Uri("DebugTreeItemView" + uriQuery, UriKind.Relative);  
RegionManager.RequestNavigate("SECOND_REGION", uri);  

这将打开带有选项卡控件的视图,我可以获取 uri 参数。但我对这个解决方案并不满意。我需要一种方法:
1. 拦截此 RegionManager.RequestNavigate 调用以检查选项卡控件是否已创建。此外,我需要检查单击的节点数据是否尚未显示在现有标签页之一中。
2. 我想将 Unit 对象直接发送到选项卡控件视图,而不是发送 ID 和 typename。实现这一目标的最佳方法是什么?

谢谢。

【问题讨论】:

    标签: wpf mvvm prism


    【解决方案1】:

    我会有一个ShellViewModel 来控制我的整个应用程序。它将包含左侧的TreeNode 集合和右侧的OpenTabs 集合。它还将包含右侧的SelectedTabIndex,如果有意义的话,可能还包含左侧的SelectedTreeNode

    当您想打开一个新选项卡时,我会使用EventAggregator 发布一个OpenTab 事件并将选定的TreeNode 项传递给它。 ShellViewModel 将订阅这些事件,并确定该对象是否已存在于 OpenTabs 集合中。如果存在,它只是设置SelectedTabIndex。如果没有,它会在设置 SelectedTabIndex 之前将该项目添加到 OpenTabs 集合中

    不久前,如果您有兴趣,我在这种使用 MVVM 的导航上发布了一些 here 内容

    【讨论】:

    • 瑞秋,谢谢你的回答。你为我指明了正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多