Я довольно новичок в 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
Кто-нибудь может помочь?Вам нужен еще какой-нибудь код от меня?Контроль загружается в представление нормально, у меня нет никаких проблем с этим.Я просто вызываю этот метод из моего модуля, что мне сложно.
Я ценю любую помощь, которую может оказать любой!Ура, Мик