簡體   English   中英

WPF雙向綁定無限循環

[英]WPF two way binding infinite loop

因為, Web瀏覽器控件的功能相當有限。 我正在嘗試使用WindowsFormsHost創建具有雙向數據綁定的WebView控件。 當我導航到新的URL時,應更新控件的url屬性。 但是,在我看來,該屬性在無限循環中發生更改,並導致應用程序崩潰。 如何在允許重新加載相同網址的同時解決此問題?

下面是代碼:

public class WebView : WindowsFormsHost
{
    private WebBrowser webBrowser;

    public static readonly DependencyProperty UrlProperty =
        DependencyProperty.Register("Url", typeof(Uri), typeof(WebView), new FrameworkPropertyMetadata(default(Uri), UrlPropertyChangedCallback));

    public Uri Url
    {
        get { return (Uri)GetValue(UrlProperty); }
        set { SetValue(UrlProperty, value); }
    }

    private static void UrlPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        (sender as WebView).webBrowser.Url = e.NewValue as Uri;
    }

    public WebView()
    {
        webBrowser = new System.Windows.Forms.WebBrowser();
        webBrowser.Navigating += webBrowser_Navigating;
        Child = webBrowser;
    }
    private void webBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
        SetCurrentValue(UrlProperty, webBrowser.Url);
    }
}

最快的方法是添加一個布爾“導航”標志-例如

bool navigating= false;    
private void webBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
    navigating= true;
    SetCurrentValue(UrlProperty, webBrowser.Url);
    navigating= false;
}

private static void UrlPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
    if (!navigating)
        (sender as WebView).webBrowser.Url = e.NewValue as Uri;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM