[英]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.