C# WPF和MVVM?

C# WPF和MVVM?,c#,wpf,mvvm,cefsharp,C#,Wpf,Mvvm,Cefsharp,我正在使用CefSharp进行WPF。我想在MVVM架构中使用它。不幸的是,有一个问题。 我认为: <ContentPresenter Content="{Binding Browser}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 不幸的是,在此之后,我无法在任何时候加载任何URL。它表示浏览器未初始化,实际上IsBrowserInit

我正在使用CefSharp进行WPF。我想在MVVM架构中使用它。不幸的是,有一个问题。 我认为:

<ContentPresenter Content="{Binding Browser}"
                  HorizontalAlignment="Center"
                  VerticalAlignment="Center"/>
不幸的是,在此之后,我无法在任何时候加载任何URL。它表示
浏览器未初始化
,实际上
IsBrowserInitialized
属性(在
浏览器
中)是
false

这很奇怪,因为在测试应用程序中,而不是在MVVM中,我使用相同的代码来实例化它工作的WebView。唯一的区别是,我以编程方式将浏览器添加到网格中,因为它不是MVVM

有人在WPF MVVM应用程序中获得了CefSharp吗?有什么想法吗

谢谢

编辑:
我注意到在测试非MVVM应用程序中,
IsBrowserInitialized
属性设置为false,直到窗口构造函数结束作业。

不幸的是,CefSharp版本1目前不太适合MVVM。幸运的是,在CEFSharp3中,我已经尝试使它更“MVVM感知”,这样您就不必进行大量的黑客攻击。看到那里的风景,你会(希望)明白我的意思

使用CefSharp 1.xx版的方法是设置
PropertyChanged
事件处理程序。一旦
IsBrowserInitialized
属性设置为true,您就可以开始工作了。像这样:

    webView.PropertyChanged += OnWebViewPropertyChanged;

    // ...

    private void OnWebViewPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        switch (e.PropertyName)
        {
            case "IsBrowserInitialized":
                if (webView.IsBrowserInitialized)
                {
                    webView.Load("http://some/url");
                }
                break;
        }
    }

我很感激这是一个老问题,可能在其他地方得到了回答,但考虑到谷歌可能会将你发送到这里(这是为我做的!)

底层的ChromiumWebBrowser对MVVM非常友好

  • 在xaml中创建控件,以便在其他控件中绑定为源/目标。e、 g.绑定回按钮
  • 还可以选择在视图模型(也称为MVVM)中创建控件,例如更复杂的浏览器管理,如调用js、连接事件等
例如

<cefSharp:ChromiumWebBrowser name="browser" WebBrowser="{Binding WebBrowser, Mode=OneWayToSource}"
 Address="{Binding Address, Mode=TwoWay}"
 RenderOptions.BitmapScalingMode="{Binding ElementName=scalingModeComboBox, Path=SelectedItem}" />


我成功地让它工作了,但出现了一个奇怪的问题。当我在WebView中单击页面时,它会从页面顶部到我单击的点进行选择。为什么?你给出的示例链接已断开。
<cefSharp:ChromiumWebBrowser name="browser" WebBrowser="{Binding WebBrowser, Mode=OneWayToSource}"
 Address="{Binding Address, Mode=TwoWay}"
 RenderOptions.BitmapScalingMode="{Binding ElementName=scalingModeComboBox, Path=SelectedItem}" />