Вызов метода управления пользователем из динамически загруженного модуля - PullRequest
0 голосов
/ 14 декабря 2011

Я довольно новичок в WPF, MVVM и т. Д., Поэтому, пожалуйста, потерпите меня.

Кроме того, я использую VB, а не c # - пожалуйста, не судите меня!:)

Я загружаю модуль по требованию, который загружает представление в модель представления.Это представление содержит пользовательский элемент управления, который содержит элемент управления веб-браузера.

В моем модуле есть события поднятия приложения, которые, когда возникает конкретное событие, мне нужно изменить URL-адрес этого веб-браузера, который был загружен выше.Я не могу понять, как создать ссылку на этот элемент управления, которую я могу использовать!

Итак, вот соответствующие (надеюсь!) Фрагменты кода:

У меня есть динамически загруженный модуль, который называется ExtensionSampleModuleVB:

Public Class ExtensionSampleModuleVB
        Implements IModule
        ReadOnly container As IObjectContainer
        ReadOnly viewManager As IViewManager
        ReadOnly commandManager As ICommandManager
        ReadOnly viewEventManager As IViewEventManager
        'WithEvents interactionManager As Interactions.IInteractionManager
        ReadOnly agentManager As IAgent

        Private WithEvents tmrTimer As New System.Timers.Timer(500)

        Public Sub New(ByVal container As IObjectContainer, ByVal viewManager As IViewManager, ByVal commandManager As ICommandManager, _
                       ByVal viewEventManager As IViewEventManager, ByVal agentManager As IAgent)
            Me.container = container
            Me.viewManager = viewManager
            Me.commandManager = commandManager
            Me.viewEventManager = viewEventManager
            Me.agentManager = agentManager
        End Sub

        Public Sub Initialize() Implements IModule.Initialize

            tmrTimer.Start()

            ' Replacing an already existing view "DispositionCodeView" in the Interaction Voice (not the behavior)

            ' Associate the existing "IDispositionCodeView" with the new "DispositionCodeExView" implementation
            container.RegisterType(Of IDispositionCodeView, DispositionCodeExViewVB)()


            ' Here we register the view (GUI) "IMySampleView" and its behavior counterpart "IMySamplePresentationModel"
            container.RegisterType(Of IMySampleViewVB, MySampleViewVB)()
            container.RegisterType(Of IMySampleViewModelVB, MySampleViewModelVB)()

            ' Put the MySample view in the region "ToolbarWorkplaceRegion" (The TabControl in the main toolbar)
            viewManager.ViewsByRegionName("ToolbarWorkplaceRegion").Insert(0, New ViewActivator() With { _
              .ViewType = GetType(IMySampleViewVB), _
              .ViewName = "MySampleVB" _
            })

            ' Here we register the view (GUI) "IMySampleMenuView"
            container.RegisterType(Of IMySampleMenuViewVB, MySampleMenuViewVB)()

            ' Put the MySampleMenuView view in the region "WorkspaceMenuRegion" (The Workspace toggle button in the main toolbar)
            viewManager.ViewsByRegionName("WorkspaceMenuRegion").Insert(0, New ViewActivator() With { _
              .ViewType = GetType(IMySampleMenuViewVB), _
              .ViewName = "MySampleMenuVB", _
              .ActivateView = True _
            })

// ...continued...

Мой элемент управления XAML выглядит следующим образом:

<UserControl x:Class="ExtensionSampleVB.MySampleVB.MySampleViewVB"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     MinHeight="90">

    <Grid>
        <WebBrowser x:Name="webBrowser" Source="http://www.google.com" 
          Width="600" Height="600"  />
    </Grid>
</UserControl>

Код этого элемента управления содержит следующие подпрограммы, которые необходимо вызватьметод 'SetURLValue' и передайте URI, чтобы веб-браузер обновился:

Public Sub SetURL_orig(ByVal strURL As Uri) 'Implements IMySampleViewVB.SetURL

    webBrowser.Navigate(strURL)

End Sub

Private Delegate Sub SetBrowserURI_Delegate(ByVal webURI As Uri)

Private Sub SetURLValue(ByVal uriAddress As System.Uri)

    If Dispatcher.CheckAccess Then
        'webBrowser.Dispatcher.BeginInvoke(Me.SetBrowserURI, System.Windows.Threading.DispatcherPriority.Background, uriAddress)

        SetURL_orig(uriAddress)

    Else

        Me.Dispatcher.BeginInvoke(New SetBrowserURI_Delegate(AddressOf SetURL_orig), uriAddress)

    End If

End Sub

Кто-нибудь может помочь?Вам нужен еще какой-нибудь код от меня?Контроль загружается в представление нормально, у меня нет никаких проблем с этим.Я просто вызываю этот метод из моего модуля, что мне сложно.

Я ценю любую помощь, которую может оказать любой!Ура, Мик

...