我正在使用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,直到窗口构造函数结束作业。
发布于 2013-10-27 02:58:37
不幸的是,CefSharp版本1目前并不能很好地适用于MVVM。幸运的是,在Mvv3中,我试图让它更“感知CefSharp”,这样你就不需要做很多修改了。看看那里的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;
}
}发布于 2021-04-16 16:40:25
我很欣赏这是一个古老的问题,可能会在其他地方得到答案,但考虑到google可能会把你送到这里的简洁标题(它对我来说就是这样!)
底层的ChromiumWebBrowser对虚拟机非常友好。
示例..
<cefSharp:ChromiumWebBrowser name="browser" WebBrowser="{Binding WebBrowser, Mode=OneWayToSource}"
Address="{Binding Address, Mode=TwoWay}"
RenderOptions.BitmapScalingMode="{Binding ElementName=scalingModeComboBox, Path=SelectedItem}" />https://stackoverflow.com/questions/17401221
复制相似问题