wpf 如何跟踪内容WebView2的更改

blpfk2vs  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(294)

有必要跟踪WebView 2中的链接更改。我在VM中有以下代码:

虚拟机

private Uri _myHtml;

public Uri MyHtml
{
    get { return _myHtml; }
    set
    {
        _myHtml = value;
        CheckUri(MyHtml);
        OnPropertyChanged();
        OnPropertyChanged(nameof(MyHtml));
    }
}

虚拟机数据库

public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
    PropertyChangedEventHandler handler = this.PropertyChanged;
    if (handler != null)
    {
        var e = new PropertyChangedEventArgs(propertyName);
        handler(this, e);
    }
}

查看XAML

<Wpf:WebView2 Name="webView"
                  Source="{Binding MyHtml, UpdateSourceTrigger=Explicit}" Grid.RowSpan="2"  Grid.ColumnSpan="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  />

遗憾的是,只有当“MyHTML”变量被直接赋值时才会触发“set”上的断点。

ee7vknir

ee7vknir1#

你有两个选择
1.将Mode设置为“双向”,然后删除UpdateSourceTrigger=Explicit

Source="{Binding MyHtml, Mode=TwoWay}"

1.如果你想保持Explicit模式,你必须调用UpdateSource()来更新绑定的属性(即MyHtml)。这可以通过如下处理NavigationCompleted事件来完成。
在.xaml中

<Wpf:WebView2 
    Source="{Binding MyHtml, UpdateSourceTrigger=Explicit, Mode=TwoWay}"
    NavigationCompleted="WebView_OnNavigationCompleted" ..

在.xaml.cs中

private void WebView_OnNavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs args)
{
    if (args.IsSuccess)
    {
        var bindingExpression =  
            webView.GetBindingExpression(WebView2.SourceProperty);
        bindingExpression?.UpdateSource();
    }
}

请注意,在这两个选项中,您都需要Mode=TwoWay

相关问题