打开带有树节点数据的选项卡

时间:2011-09-15 15:54:57

标签: wpf mvvm prism

嗨,
我是Prism和WPF的新手,我有一个关于在视图之间共享数据的问题。 我正在开发的应用程序类似于SQL Server Development Studio。演示包含两个区域。第一个区域包含树(如SQL Server DS中的Object explorer)。树节点绑定到不同的视图模型。示例将是DatabaseA-> Tables-> dbo.TableA->列等。

第二个区域最初是空的。当我双击树节点时,我想打开显示我在树中单击的数据的视图 详细说明:
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。实现这一目标的最佳方法是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

我会ShellViewModel控制我的整体申请。它将包含左侧的TreeNode集合和右侧的OpenTabs集合。它还包含右侧的SelectedTabIndex,如果有意义的话,也可能包含左侧的SelectedTreeNode

如果要打开新标签页,我会使用EventAggregator发布OpenTab事件并将其传递给所选的TreeNode项。 ShellViewModel将订阅这些事件,并确定该对象是否已存在于OpenTabs集合中。如果存在,则只设置SelectedTabIndex。如果没有,则会在设置OpenTabs

之前将该项添加到SelectedTabIndex集合中

前段时间我在MVVM上发布了here这样的导航内容,如果你有兴趣的话