2013-07-01 4 views
3

Я использую CefSharp для WPF. Я хочу использовать его в архитектуре MVVM. К сожалению, есть проблема. По мнению у меня есть:CefSharp WPF и 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) is false.

Это странно, потому что в тестовом приложении, а не MVVM, где я использовал тот же код для создания экземпляра WebView, он работает. Единственное отличие заключается в том, что я программным образом добавил браузер в сетку, поскольку это не MVVM.

Кто-нибудь получил CefSharp в приложении WPF MVVM? Есть идеи?

Благодаря

EDIT: я заметил в тесте, не MVVM приложение, что свойство IsBrowserInitialized устанавливается в ложь, пока окно конструктора не завершит работу.

+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