C# WPF和MVVM?
我正在使用CefSharp进行WPF。我想在MVVM架构中使用它。不幸的是,有一个问题。 我认为:C# WPF和MVVM?,c#,wpf,mvvm,cefsharp,C#,Wpf,Mvvm,Cefsharp,我正在使用CefSharp进行WPF。我想在MVVM架构中使用它。不幸的是,有一个问题。 我认为: <ContentPresenter Content="{Binding Browser}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 不幸的是,在此之后,我无法在任何时候加载任何URL。它表示浏览器未初始化,实际上IsBrowserInit
<ContentPresenter Content="{Binding Browser}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
不幸的是,在此之后,我无法在任何时候加载任何URL。它表示浏览器未初始化
,实际上IsBrowserInitialized
属性(在浏览器
中)是false
这很奇怪,因为在测试应用程序中,而不是在MVVM中,我使用相同的代码来实例化它工作的WebView。唯一的区别是,我以编程方式将浏览器添加到网格中,因为它不是MVVM
有人在WPF MVVM应用程序中获得了CefSharp吗?有什么想法吗
谢谢
编辑:
我注意到在测试非MVVM应用程序中,
IsBrowserInitialized
属性设置为false,直到窗口构造函数结束作业。不幸的是,CefSharp版本1目前不太适合MVVM。幸运的是,在CEFSharp3中,我已经尝试使它更“MVVM感知”,这样您就不必进行大量的黑客攻击。看到那里的风景,你会(希望)明白我的意思
使用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中创建控件,以便在其他控件中绑定为源/目标。e、 g.绑定回按钮
- 还可以选择在视图模型(也称为MVVM)中创建控件,例如更复杂的浏览器管理,如调用js、连接事件等
<cefSharp:ChromiumWebBrowser name="browser" WebBrowser="{Binding WebBrowser, Mode=OneWayToSource}"
Address="{Binding Address, Mode=TwoWay}"
RenderOptions.BitmapScalingMode="{Binding ElementName=scalingModeComboBox, Path=SelectedItem}" />
我成功地让它工作了,但出现了一个奇怪的问题。当我在WebView中单击页面时,它会从页面顶部到我单击的点进行选择。为什么?你给出的示例链接已断开。
<cefSharp:ChromiumWebBrowser name="browser" WebBrowser="{Binding WebBrowser, Mode=OneWayToSource}"
Address="{Binding Address, Mode=TwoWay}"
RenderOptions.BitmapScalingMode="{Binding ElementName=scalingModeComboBox, Path=SelectedItem}" />