Gracias a this question (click me!), tengo la propiedad Source
de mi WebBrowser
vinculando correctamente a mi ViewModel.¿Existe una forma MVVM amigable de utilizar el control WebBrowser en WPF?
Ahora me gustaría conseguir dos objetivos más:
IsEnabled
obtener la propiedad de mis botones Atrás y Adelante para unirse correctamente a lasCanGoBack
yCanGoForward
propiedades delWebBrowser
.- Descubre cómo llamar a los métodos
GoForward()
yGoBack()
sin recurrir al código subyacente y sin que ViewModel tenga que saber sobre elWebBrowser
.
Tengo el siguiente (no de trabajo) de marcado XAML en la actualidad
<WebBrowser
x:Name="_instructionsWebBrowser"
x:FieldModifier="private"
clwm:WebBrowserUtility.AttachedSource="{Binding InstructionsSource}" />
<Button
Style="{StaticResource Button_Style}"
Grid.Column="2"
IsEnabled="{Binding ElementName=_instructionsWebBrowser, Path=CanGoBack}"
Command="{Binding GoBackCommand}"
Content="< Back" />
<Button
Style="{StaticResource Button_Style}"
Grid.Column="4"
IsEnabled="{Binding ElementName=_instructionsWebBrowser, Path=CanGoForward}"
Command="{Binding GoForwardCommand}"
Content="Forward >" />
Estoy seguro de que el problema es que CanGoBack
y CanGoForward
no son propiedades de dependencia (y no aplican INotifyChanged
), pero no estoy muy seguro de cómo solucionarlo.
Preguntas:
¿Hay alguna manera de conectar las propiedades asociadas (como lo hice con
Source
) o algo similar para obtener losCanGoBack
yCanGoForward
fijaciones para trabajar?¿Cómo se escribe
GoBackCommand
yGoForwardCommand
, por lo que son independientes del código subyacente y ViewModel y se pueden declarar en el marcado?
@Botz, gracias. Estoy un poco confuso acerca de cómo configuras tu clase 'FrameworkElement'. Supongo que tienes un campo 'webBrowser', pero ¿cómo logras que se muestre? Estaba pensando que necesitaría construir un 'UserControl' y poner el' WebBrowser' en, por ejemplo, 'Grid' en el control. ¿Cómo manejas esto con una clase que hereda 'FrameworkElement'? Gracias. – devuxer
En realidad, no necesita un UserControl, un FrameworkElement está bien siempre y cuando lo configure correctamente. Mi implementación puede no ser la mejor, pero si quieres echarle un vistazo, el control se puede encontrar aquí: http://pastebin.com/m492dbd3f (si te preguntas acerca de BrowserViewModel, es el ViewModel del que las propiedades del control están destinadas , estoy seguro de que ya tienes tu propio ViewModel) – Botz3000
// btw Si derivas de FrameworkElement, puedes llamar a AddVisualChild y AddLogicalChild para poner realmente el WebBrowser o cualquier otra cosa dentro de él – Botz3000