Ich bin ein WebBrowser-Steuerelement mit einer daran befestigten Eigenschaft verwenden zu einer Uri
Eigenschaft in Ansichtsmodell zu binden, wie in this question beschriebenWebBrowser in WPF mit gebundener Quelle angefügten Eigenschaft navigiert nur einmal
Es funktioniert, aber bei jedem Start der Anwendung Der Browser navigiert genau einmal. Bei zweiten und weiteren Versuchen wird es einfach leer (transparent, nicht weiß).
Ansichtsmodell:
public Uri BrowserUri
{
get
{
return GetBrowserUri();
}
}
angebaute Eigenschaft:
public class AttachedUri
{
public static readonly DependencyProperty AttachedUriProperty =
DependencyProperty.RegisterAttached("AttachedUri", typeof(string), typeof(AttachedUri), new UIPropertyMetadata(null, AttachedUriPropertyChanged));
public static string GetAttachedUri(DependencyObject obj)
{
return (string)obj.GetValue(AttachedUriProperty);
}
public static void SetAttachedUri(DependencyObject obj, string value)
{
obj.SetValue(AttachedUriProperty, value);
}
public static void AttachedUriPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
WebBrowser browser = o as WebBrowser;
if (browser != null)
{
string uri = e.NewValue as string;
if (!String.IsNullOrEmpty(uri))
{
browser.NavigateToString("<html></html>"); // trying to refresh
browser.Navigate(new Uri(uri));
}
}
}
}
XAML:
<controls:WebBrowser at:AttachedUri.AttachedUri="{Binding BrowserUri}" Navigating="PDFBrowser_OnNavigating"/>
Wie oben gesehen, ich habe auch versucht, wenn Navigating
Ereignis ausgelöst wird jedes Mal, um zu sehen, wenn ich versuche, navigieren. Es feuert jedes Mal für Navigate
aber nur einmal für NavigateToString
.
Ich brauche den Browser, um zwischen verschiedenen benannten Zielen in einer PDF-Datei zu navigieren.
Es gibt keine Benachrichtigungsmechanismus, der die Bindung, wenn die Änderungen BrowserUri Eigenschaft informiert. Ihre Ansichtsmodellklasse sollte die INotifyPropertyChanged-Schnittstelle implementieren. – Clemens
Mein Ansichtsmodell implementiert INotifyPropertyChanged. Ich sehe jeden neuen Uri in AttachedUriPropertyChanged verarbeitet, es scheint nur keine Auswirkungen auf den Browser zu haben. Die Bindung ist als nur ein Weg gemeint, vom Ansichtsmodell zum Browser, nicht zurück – gingergenius
Eine Sache, die mir aufgefallen ist: Das Aufrufen von Refresh() im Browser führt immer zu einer Exception.HRESULT E_FAIL – gingergenius