CefSharp WPF and MVVM?
本文关键字:MVVM and WPF CefSharp | 更新日期: 2023-09-27 18:20:28
我正在使用头孢夏普进行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,直到窗口构造函数结束作业。
使用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中创建控件,以便在其他控件中作为源/目标进行绑定。例如回绑定按钮
- 并可选择在视图模型(也称为MVVM)中创建控件,例如更复杂的浏览器管理,如调用js、连接事件等
示例。。
<cefSharp:ChromiumWebBrowser name="browser" WebBrowser="{Binding WebBrowser, Mode=OneWayToSource}"
Address="{Binding Address, Mode=TwoWay}"
RenderOptions.BitmapScalingMode="{Binding ElementName=scalingModeComboBox, Path=SelectedItem}" />