2013-07-01 1 views
3

WPF 용 CefSharp를 사용하고 있습니다. 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입니다.

테스트 앱에서 MVView가 아니기 때문에 동일한 코드를 사용하여 WebView를 인스턴스화했기 때문에 이상합니다. 차이점은 MVVM이 아니므로 프로그래밍 방식으로 브라우저를 Grid에 추가 한 것입니다.

누구나 WPF MVVM 앱에서 CefSharp를 얻었습니까? 어떤 아이디어?

감사

편집 : 나는 윈도우 생성자는 작업이 종료 될 때까지 IsBrowserInitialized 속성이 false로 설정되어 있는지, 테스트 비 MVVM 응용 프로그램에 나타났습니다.

+0

나는 그럭저럭 일할 수 있었다. 그러나 이상한 문제가 있었다. WebView 내부의 페이지를 클릭하면 페이지 상단에서 클릭 한 지점까지 선택할 수 있습니다. 왜? – Joe

답변

8

CefSharp 버전 1은 현재 MVVM에 적합하지 않습니다. 불행히도. 운좋게도, CefSharp 3에서는 더 많은 "MVVM-aware"를 만들려고 노력 했으므로 많은 해킹 작업을 수행 할 필요가 없습니다. 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