Dank this question (click me!) habe ich die Source
Eigenschaft meiner WebBrowser
Bindung korrekt an mein ViewModel.Gibt es eine MVVM-freundliche Möglichkeit, das WebBrowser-Steuerelement in WPF zu verwenden?
Nun möchte Ich mag zwei weitere Ziele zu erreichen:
- die
IsEnabled
Eigenschaft meiner Schaltflächen Zurück und Vorwärts Erhalten Sie richtig dieWebBrowser
dieCanGoBack
undCanGoForward
Eigenschaften zu binden. - Finden Sie heraus, wie Sie die
GoForward()
undGoBack()
Methoden ohne Rückgriff auf die Code-Behind aufrufen und ohne das ViewModel über dieWebBrowser
wissen müssen.
Ich habe folgende (ohne Funktion) XAML-Markup im 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 >" />
Ich bin mir ziemlich sicher, dass das Problem ist, dass CanGoBack
und CanGoForward
nicht Abhängigkeitseigenschaften (und nicht implementieren INotifyChanged
), aber ich bin nicht ganz sicher, wie ich das schaffen soll.
Fragen:
Gibt es eine Möglichkeit angefügten Eigenschaften hook up (wie ich mit
Source
tat) oder etwas ähnliches dieCanGoBack
undCanGoForward
Bindungen an die Arbeit?Wie schreiben die
GoBackCommand
undGoForwardCommand
, so dass sie unabhängig von der Code-Behind und ViewModel sind und in Markup deklariert werden können?
@Botz, danke. Ich bin ein wenig verschwommen darüber, wie Sie Ihre 'FrameworkElement' Klasse tatsächlich einrichten. Ich nehme an, Sie haben ein Feld 'webBrowser', aber wie bekommen Sie es eigentlich angezeigt? Ich dachte, ich müsste ein "UserControl" erstellen und den "WebBrowser" in ein "Grid" auf dem Steuerelement platzieren. Wie gehst du mit einer Klasse um, die 'FrameworkElement' erbt? Vielen Dank. – devuxer
Sie brauchen eigentlich kein UserControl, ein FrameworkElement ist in Ordnung, solange Sie es richtig eingerichtet haben. Meine Implementierung ist vielleicht nicht die beste, aber wenn Sie einen Blick darauf werfen wollen, finden Sie das Steuerelement hier: http://pastebin.com/m492dbd3f (Wenn Sie sich über BrowserViewModel wundern, ist es das ViewModel, an das die Eigenschaften des Steuerelements gebunden sind , ich bin sicher, dass Sie bereits Ihr eigenes ViewModel haben) – Botz3000
// btw Wenn Sie von FrameworkElement ableiten, können Sie AddVisualChild und AddLogicalChild aufrufen, um den WebBrowser oder irgendetwas anderes darin wirklich zu setzen – Botz3000