[英]WPF WebView2 Error - source property cannot be set to null
要验证 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
上引发 SourceChanged 事件时调用的 SourceChangedCommand 完成的(遵循此处描述的导航事件生命周期)。 SourceChangedCommand.Execute
如下:
public void Execute(object? parameter)
{
if (ValidateUri(_viewModel.WebUri.ToString()))
{
var str = _viewModel.WebUri.ToString().Substring(50);
_navigationService.Authenticate(str);
}
}
这是我遇到问题的地方:我还有一个 NavigationService,它在视图模型之间导航并通过数据模板等更改视图......当使用 WebView2 离开视图时(即:更改父视图上的数据上下文),我收到以下错误:
Source 属性不能设置为 null
这非常令人困惑,因为 WebView2 的源实际上从未设置为 null - 它被维护为重定向的 Uri。 这里出了什么问题,我怎样才能离开这个视图?
我正在探索的可能解决方案是创建一个扩展 WebView2 的自定义控件,该控件具有映射到 WebView2.Dispose(bool) 的 bool 依赖项属性 -> 如果为真,则将处理 webview。 然而,这似乎有点矫枉过正,可能会引发与ObjectDisposedException
相关的其他问题。
我遇到了同样的问题,发现这是因为我在绑定上设置了 IsAsync=true。
还要检查您绑定到的属性。 他们总是需要能够得到一个不是 null 的值。
当我的属性被初始化时,我将它们设置为 new Uri("about:blank")。
此外,使用 this._myProp = new UriBuilder(value).Uri?? 字段集上的 new Uri("about:blank") 以确保没有空值
嘿 Microsoft 一个带有 about:blank 的 static Uri.Empty 属性怎么样?
我希望这有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.