我正在为 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/