【问题标题】:CefSharp WPF and MVVM?CefSharp WPF 和 MVVM?
【发布时间】:2013-06-28 09:10:35
【问题描述】:

我正在将 CefSharp 用于 WPF。我想在 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,直到窗口构造函数结束作业。

【问题讨论】:

  • 我设法让它工作,但有一个奇怪的问题。当我单击 WebView 内的页面时 - 它会从页面顶部到我单击的点进行选择。为什么?

标签: c# wpf mvvm cefsharp


【解决方案1】:

我很欣赏这是一个老问题,可能在其他地方得到了回答,但鉴于标题简洁,谷歌可能会将您发送到这里(它对我有用!)

底层的 ChromiumWebBrowser 非常对 MVVM 友好..

  • 在 xaml 中创建控件,以便在其他控件中绑定为源/目标。例如绑定返回按钮。
  • 并可选择在您的视图模型(又名 MVVM)中创建控件,例如更复杂的浏览器管理,如调用js、挂钩事件等。

例子..

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

【讨论】:

    【解决方案2】:

    不幸的是,目前 CefSharp 版本 1 不太适合 MVVM。幸运的是,在 CefSharp 3 中,我试图让它更“支持 MVVM”,这样你就不必做很多 hack。看到那里的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;
            }
        }
    

    【讨论】:

    • 您提供的示例链接已损坏。
    猜你喜欢
    • 2017-12-04
    • 1970-01-01
    • 2016-03-12
    • 2011-06-25
    • 2011-01-03
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多