为了验证 API 服务,用户需要登录网页。如果登录有效,则会将身份验证代码追加到重定向的 Uri 的末尾。然后在 oauth 中使用身份验证代码获取密钥等...为了方便起见,我已经实现了 WebView2:
我在视图模型中有验证逻辑,用于识别重定向URI是否包含认证码。这是通过调用
这是我遇到的问题所在: 我还有一个NavigationService,它可以在视图模型之间导航并通过数据模板更改视图等等... 当从具有WebView2的视图导航离开(即:在父视图上更改数据上下文)时,会出现以下错误:
引用块: 源属性不能设置为null 这非常令人困惑,因为WebView2的源实际上从未设置为null——它被维护为重定向的Uri。出了什么问题,我如何从这个视图中导航离开? 我正在探索的可能解决方案是创建一个自定义控件,扩展WebView2,并映射到WebView2.Dispose(bool)的bool依赖属性——如果为true,则WebView将被处理。然而,这似乎过度复杂化,并可能带来其他与ObjectDisposedException有关的问题。
<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 这非常令人困惑,因为WebView2的源实际上从未设置为null——它被维护为重定向的Uri。出了什么问题,我如何从这个视图中导航离开? 我正在探索的可能解决方案是创建一个自定义控件,扩展WebView2,并映射到WebView2.Dispose(bool)的bool依赖属性——如果为true,则WebView将被处理。然而,这似乎过度复杂化,并可能带来其他与ObjectDisposedException有关的问题。