CefSharp WPF和MVVM?

Joe*_*Joe 4 c# wpf mvvm cefsharp

我正在使用CefSharp for WPF.我想在MVVM架构中使用它.不幸的是有一个问题.在视图中我有:

<ContentPresenter Content="{Binding Browser}"
                  HorizontalAlignment="Center"
                  VerticalAlignment="Center"/>
Run Code Online (Sandbox Code Playgroud)

在ViewModel中,我将一个新对象放入Browser:

var settings = new CefSharp.Settings
{
    PackLoadingDisabled = true,
}
if (CefSharp.CEF.Initialize(settings))
{
    int counter = 0;
    this.Browser = new WebView();
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,之后我无法加载任何URL.它说Browser not initialized,实际上IsBrowserInitialized属性(in Browser)是false.

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

有没有人在WPF MVVM应用程序中获得CefSharp?有任何想法吗?

谢谢

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

Per*_*erg 8

不幸的是,CefSharp版本1目前还不太适合MVVM.幸运的是,在CefSharp 3中,我试图让它更具"MVVM感知",所以你不必做很多黑客攻击.请参阅那里的CefSharp.Wpf.Example代码,您将(希望)看到我的意思.

使用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;
        }
    }
Run Code Online (Sandbox Code Playgroud)