1

我正在使用找到她的指南作为参考:https ://docs.microsoft.com/en-us/microsoft-edge/webview2/gettingstarted/wpf

利用该指南,我能够在我的应用程序中启动 WebView2。现在我正在尝试将代码分离到 ViewModel 中,因为该页面上将有更多元素。该应用程序作为一个整体使用 Caliburn Micro。除了 WebView2 本身,我能够将所有内容绑定到 ViewModel。当我选择 Go 按钮时,它表明 WebView 为空。我尝试手动设置 WebView 但这不起作用。

浏览器视图.xaml:

    <Button 
            x:Name="ButtonGo" 
            Content="Go"
            />
        <TextBox x:Name = "Addressbar"
                 />
    <wv2:WebView2 x:Name = "WebView"
                  Source="{Binding WebViewSource}"
/>

浏览器视图模型.cs

        private WebView2 _webView;

    public WebView2 WebView
    {
        get 
        {
            return _webView; 
        }
        set 
        {
            _webView = value;
            NotifyOfPropertyChange(() => WebView);
        }
    }

    public string WebViewSource { get; set; } = "http://Google.com";

    private string _addressbar;

    public string Addressbar
    {
        get 
        { 
            return _addressbar; 
        }
        set 
        { 
            _addressbar = value;
            NotifyOfPropertyChange(() => Addressbar);
        }
    }


    public void ButtonGo()
    {
        if (WebView != null && WebView.CoreWebView2 != null)
        {
            WebView.CoreWebView2.Navigate("https://bing.com");
        }
    }

无论我尝试什么,WebView 都会返回 null 并且我无法更改页面。

4

2 回答 2

1

正如 aepot 评论的那样,删除 Webview 属性并通知源中的更改解决了该问题。代码现在看起来像这样:

<Button x:Name="ButtonGo" 
        Content="Go"/>
<TextBox x:Name = "Addressbar"/>
<wv2:WebView2 x:Name = "WebView"
              Source="{Binding WebViewSource}"/>

这对于 ViewModel:

public string Addressbar
{
   get
   {
      return _addressbar;
   }
   set
   {
      _addressbar = value;
      NotifyOfPropertyChange(() => Addressbar);
   }
}

public void ButtonGo()
{
   WebViewSource = Addressbar;
   NotifyOfPropertyChange(() => WebViewSource);
}
于 2020-07-08T07:40:07.197 回答
1

视图模型不应该保留对像WebView2. 这不是 MVVM,也不是 Caliburn.Micro 的工作方式。视图模型定义属性。

如果您TextBlock向视图模型添加一个属性(您不应该!),它也将始终null与您的WebView2属性一样,即使您TextBlock在 XAML 标记中添加了具有相应名称的 a。

恐怕这没有多大意义,尤其是关于 MVVM 和 Caliburn.Micro。

于 2020-07-06T15:11:32.070 回答