WPF WebView2 错误 - source 属性不能设置为 null。

4
为了验证 API 服务,用户需要登录网页。如果登录有效,则会将身份验证代码追加到重定向的 Uri 的末尾。然后在 oauth 中使用身份验证代码获取密钥等...为了方便起见,我已经实现了 WebView2:
        <wv2:WebView2 Name="webView"
                  Width="800"
                  Height="500"
                  Source="{Binding WebUri, Mode=TwoWay}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SourceChanged">
                <i:InvokeCommandAction Command="{Binding SourceChangedCommand}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </wv2:WebView2>

我在视图模型中有验证逻辑,用于识别重定向URI是否包含认证码。这是通过调用SourceChangedCommand实现的,当WebView上抛出SourceChanged事件时调用它(按照这里所描述的导航事件生命周期)。SourceChangedCommand.Execute的代码如下:
    public void Execute(object? parameter)
    {
        if (ValidateUri(_viewModel.WebUri.ToString()))
        {
            var str = _viewModel.WebUri.ToString().Substring(50);
            _navigationService.Authenticate(str);
        }
    }

这是我遇到的问题所在: 我还有一个NavigationService,它可以在视图模型之间导航并通过数据模板更改视图等等... 当从具有WebView2的视图导航离开(即:在父视图上更改数据上下文)时,会出现以下错误:
引用块: 源属性不能设置为null

enter image description here

这非常令人困惑,因为WebView2的源实际上从未设置为null——它被维护为重定向的Uri。出了什么问题,我如何从这个视图中导航离开? 我正在探索的可能解决方案是创建一个自定义控件,扩展WebView2,并映射到WebView2.Dispose(bool)的bool依赖属性——如果为true,则WebView将被处理。然而,这似乎过度复杂化,并可能带来其他与ObjectDisposedException有关的问题。

1
您可以考虑在此处发布您的问题:WebView2反馈 - Tu deschizi eu inchid
1个回答

0

我曾经遇到过同样的问题,后来发现是因为我在绑定上设置了IsAsync=true

同时检查一下你要绑定的属性。它们始终需要能够获取非空值。

当我的属性被初始化时,我将它们设置为新的Uri("about:blank")
此外,使用 this._myProp = new UriBuilder(value).Uri ?? new Uri("about:blank") 在字段设置上确保没有空值

嘿,微软,能不能提供一个静态的Uri.Empty属性,里面包含about:blank?

希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接