WPF Prism:使用RequestNavigate导航或将视图添加到区域

时间:2018-08-10 09:03:26

标签: wpf vb.net mvvm prism-6

我是MVVM和Prism的新手,请设法绕过它。我用Google搜索了很多代码示例,现在我尝试将它们组合在一起。但是我不知道这是否像我那样正确?

基本上,我有3个级别的TreeView。对于3个TreeView级别的每一个,我都有一个View / Viewmodel。因此,如果TreeView级别具有更多项,我将注入同一View / Viewmodel的第二个实例。因此,TreeViewItem 2.1具有与2.2相同的View / Viewmodel,但是它们具有不同的数据/ ID。这就是我到目前为止所得到的。在MainWindowViewModel中(我有一个Unity容器和一个RegionManager):

Public Overrides Sub Initialize()
  Container.RegisterTypeForNavigation(Of Views.TreeLevel1View)()
  Container.RegisterTypeForNavigation(Of Views.TreeLevel2View)()
  Container.RegisterTypeForNavigation(Of Views.TreeLevel3View)()
End Sub

单击TreeViewItem后,我有一个DelegateCommand到此Sub(在TreeViewModel中):

Public Sub TreeViewClickEvent(ByVal treeviewobject as Object)

  Dim parameter = New NavigationParameters()
  If treeviewobject.Level = 1 Then
    parameter.Add("Level1", treeviewobject.ID)
    RegionManager.RequestNavigate("TreeViewDetailRegion", "TreeLevel1View", parameter)
  Elseif treeviewobject.Level = 2 Then
    parameter.Add("Level2", treeviewobject.ID)
    RegionManager.RequestNavigate("TreeViewDetailRegion", "TreeLevel2View", parameter)
  Else
    parameter.Add("Level3", treeviewobject.ID)
    RegionManager.RequestNavigate("TreeViewDetailRegion", "TreeLevel3View", parameter)
  End if

End Sub

然后,我在ViewModel中为level1检查ID是否与TreeViewItem相同(例如,LevelID是一个属性):

Public Sub OnNavigatedTo(navigationContext As NavigationContext) Implements INavigationAware.OnNavigatedTo 

  Dim navigationID As String = navigationContext.Parameters("Level1")
  If navigationID IsNot Nothing Then
    LevelID = navigationID
  End If

End Sub

Public Function IsNavigationTarget(navigationContext As NavigationContext) As Boolean Implements INavigationAware.IsNavigationTarget

        Dim navigationID As String = navigationContext.Parameters("Level1")
        If navigationID IsNot Nothing Then
            Return LevelID IsNot Nothing AndAlso navigationID = LevelID
        Else
            Return True
        End If

End Function

所以基本上我是在属性LevelID的帮助下导航的,这感觉不太好:-(

我也尝试了这种向该区域添加视图的方法,但是我不知道我需要多少,并且不确定将其放置在何处。

Public Sub TreeViewClickEvent(ByVal treeviewobject As Object)

  Dim Level1View1 As Views.TreeLevel1View = Container.Resolve(Of Views.TreeLevel1View)
  Dim Level1View2 As Views.TreeLevel1View = Container.Resolve(Of Views.TreeLevel1View)
  Dim TreeViewItemRegionTest = Me.RegionManager.Regions(RegionNames.TreeItemDetailRegion)
  --- TreeViewItem 2.1
  TreeViewItemRegionTest.Add(Level1View1, treeviewobject.ID)
  --- TreeViewItem 2.2
  TreeViewItemRegionTest.Add(Level1View2, treeviewobject.ID)

End Sub

0 个答案:

没有答案