2013-07-01 201 views
3

我正在使用CefSharp for WPF。我想在MVVM架構中使用它。不幸的是有一個問題。 在視圖中我有:CefSharp WPF和MVVM?

<ContentPresenter Content="{Binding Browser}" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center"/> 

在視圖模型我把一個新的對象到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。

+0

我設法使它工作,但有一個奇怪的問題。當我點擊WebView內的頁面時,它會從頁面頂部到點擊的位置進行選擇。爲什麼? – Joe

回答

8

不幸的是,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; 
     } 
    } 
+0

您給出的示例鏈接已損壞。 – AndyUK