Grâce à this question (click me!), j'ai la propriété Source
de ma WebBrowser
qui se lie correctement à mon ViewModel.Existe-t-il une façon conviviale MVVM d'utiliser le contrôle WebBrowser dans WPF?
Maintenant, je voudrais réaliser deux objectifs:
- obtenir la propriété
IsEnabled
de mes boutons Précédent et Suivant pour lier correctement les propriétésCanGoBack
etCanGoForward
duWebBrowser
. - Découvrez comment appeler les méthodes
GoForward()
etGoBack()
sans recourir au code-behind et sans que le ViewModel ait à connaître leWebBrowser
.
Je donne les résultats suivants (non-travail) balisage XAML au moment:
<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 >" />
Je suis sûr que le problème est que CanGoBack
et CanGoForward
ne sont pas des propriétés de dépendance (et ne mettent pas en œuvre INotifyChanged
), mais je ne suis pas sûr de savoir comment contourner cela.
Questions:
Est-il possible de brancher des propriétés attachées (comme je l'ai fait avec
Source
) ou quelque chose de similaire pour obtenir les liaisonsCanGoBack
etCanGoForward
au travail?Comment écrire les
GoBackCommand
etGoForwardCommand
afin qu'ils soient indépendants du code-behind et ViewModel et peuvent être déclarés dans le balisage?
@Botz, merci. Je suis un peu flou sur la façon dont vous configurez votre classe 'FrameworkElement'. Je suppose que vous avez un champ 'webBrowser', mais comment l'afficher? Je pensais que je devrais construire un 'UserControl' et placer réellement' WebBrowser' dans, disons, un 'Grid' sur le contrôle. Comment gérez-vous cela avec une classe qui hérite de 'FrameworkElement'? Merci. – devuxer
Vous n'avez pas vraiment besoin d'un UserControl, un FrameworkElement est parfait tant que vous le configurez correctement. Mon implémentation n'est peut-être pas la meilleure, mais si vous voulez jeter un oeil, le contrôle peut être trouvé ici: http://pastebin.com/m492dbd3f (si vous vous posez des questions sur BrowserViewModel, c'est le ViewModel, les propriétés du contrôle sont en fait liées à , je suis sûr que vous avez déjà votre propre ViewModel si) – Botz3000
// btw Si vous dérivez de FrameworkElement, vous pouvez appeler AddVisualChild et AddLogicalChild pour mettre réellement le WebBrowser ou toute autre chose dedans – Botz3000