c# - CefSharp WPF 和 MVVM?

标签 c# wpf mvvm cefsharp

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

<ContentPresenter Content="{Binding Browser}"
                  HorizontalAlignment="Center"
                  VerticalAlignment="Center"/>

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

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

不幸的是,在那之后的任何时候我都无法加载任何 URL。它说 Browser not initialized 而实际上 IsBrowserInitialized 属性(在 Browser 中)是 false

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

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

谢谢

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

最佳答案

不幸的是,CefSharp 版本 1 目前不太适合 MVVM。幸运的是,在 CefSharp 3 中,我已尝试使其更加“支持 MVVM”,因此您不必进行大量修改。查看CefSharp.Wpf.Example code在那里你会(希望)明白我的意思。

让它与 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;
        }
    }

关于c# - CefSharp WPF 和 MVVM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17401221/

相关文章:

c# - 如果在 asp.net 向导中验证失败则取消步骤

c# - 如何防止在未登录的情况下使用window azure媒体服务器的文件路径播放视频?

C# - 将项目从 ListView 拖到垃圾桶中?

c# - 方法 - 32 位与 try-catch 以及 iSeries ODBC 驱动程序

wpf - 如何将 WPF 中的命令绑定(bind)到控件的双击事件处理程序?

c# - 实现逻辑的好方法,在 ListBox (MVVM) 中选择项目时

c# - 从循环列表中查找父类<class>

wpf - 自定义 WPF 命名空间映射在 Visual Studio 2010 中失败

wpf - 如何在 WPF 中获取当前鼠标屏幕坐标?

javascript - Knockoutjs View 定位器?