WPF WebView2 从不在视图模型中初始化 returns

WPF WebView2 Initialization in viewmodel never returns

在我的 wpf 应用程序中,我尝试显示用于登录的 webView2,即使当我导航到该视图并开始初始化时,也没有任何反应。我已经尝试了很多在互联网上找到的选项和解决方案,这些选项和解决方案对其他人有用,但没有任何帮助。

代码:

    private WebView2 m_webView21;
    public WebView2 WebView21 { get => m_webView21; set => SetProperty(ref m_webView21, value); }

 protected async Task<WebView2> CreateBrowserAndLoadUrlAsync(string url)
    {
      webView21 = new WebView2();
      webView21.CoreWebView2InitializationCompleted += WebView21_CoreWebView2InitializationCompleted;

      Debug.WriteLine("InitializeAsync");
      await webView21.EnsureCoreWebView2Async();
      Debug.WriteLine("WebView2 Runtime version: " + webView21.CoreWebView2.Environment.BrowserVersionString);

      SetBrowserHostVisibility(Visibility.Visible);
      if (webView21 != null && webView21.CoreWebView2 != null)
      {
        webView21.CoreWebView2.Navigate(url);
      }
      return webView21;
    }

    private void WebView21_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
    {
      webView21.Loaded += Browser_FrameLoadEnd;
      webView21.Initialized += Browser_InitializedChanged;
    }

--Xaml Code--

  <Grid Background="Transparent">
    <wv2:WebView2 Visibility="Visible"  Source="{Binding WebView21.Source.AbsoluteUri, Mode=OneWay}"/>
  </Grid>

这是我在视图模型中从 OnNavigatedTo() 调用的第一件事。 EnsureCoreWebViewAsync() 的一切正常,因为它应该解除它 - 从这个函数它永远不会 returns - 什么都没有发生。

当我不初始化 webview2 并将源设置为 uri 时,一切正常。但是没有事件或任何东西被触发(例如 NavigationCompleted、SourceChanged 等),我需要这些事件。

我安装了正确的运行时,当然我还安装了 WebView2 插件。也尝试了不同的环境,但没有任何帮助。

所以实际的问题是,是否可以从 Viewmodel 初始化 WebView2?

我找到了解决方案。我不得不在我的 xaml 中使用一个占位符,后来在我的 Viewmodel 中初始化了 webView2。

只需更改问题中的 xaml 代码,它应该可以正常工作

 <ContentControl Content="{Binding WebView21, Mode=OneWay}" />

感谢所有有用的评论:))