WPF双向绑定无限循环
本文关键字:无限循环 绑定 WPF | 更新日期: 2023-09-27 18:01:20
由于Web浏览器控件的功能相当有限。我试图使用WindowsFormsHost
创建一个具有双向数据绑定的WebView控件。当导航到新url时,控件的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);
}
}
最快的方法是添加一个布尔" navigation"标志-例如
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;
}