WP7 WebBrowser в MVVM - PullRequest
       1

WP7 WebBrowser в MVVM

2 голосов
/ 19 июня 2011

Я использую элемент управления WebBrowser в приложении MVVM WP7. Я использовал присоединенное свойство, чтобы разрешить привязку элемента управления к сгенерированной строке HTML, как описано в http://compiledexperience.com/blog/posts/binding-html-to-the-web-browser-control. Присоединенное свойство привязано к моей виртуальной машине, которая генерирует HTML-код. Проблема в том, что код генерируется до полной загрузки элемента управления, поэтому я получаю исключение при изменении свойства виртуальной машины:

Вы не можете вызывать методы WebBrowser, пока они не будут в визуальном дереве.

Я мог бы использовать какой-то "хак", например вообще избежать связывания, а скорее запустить событие с моей виртуальной машины и позволить представлению обработать его и отложить вызов WebBrowser.NavigateToString до его загрузки, но мне было интересно, сможет ли кто-нибудь предложить лучший, более элегантный способ ...

1 Ответ

6 голосов
/ 19 июня 2011

Я думаю, что лучше всего исправить закрепленное свойство, чтобы оно работало правильно.Вот предложение:

private static void OnHtmlChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    var browser = d as WebBrowser;

    if(browser == null)
        return;

    var html = e.NewValue.ToString(); 

    try
    {
        browser.NavigateToString(html);
    }
    catch (Exception ex)
    {
        browser.Loaded += (s,e3) =>
           {
               browser.NavigateToString(html);
           }
    }

}

Приведенный выше код пытается отобразить HTML-код. Если генерируется исключение, обрабатывается событие Loaded (которое происходит, когда элемент управления отображается в визуальном дереве), затемHTML предоставляется.

Возможно, есть лучшие методы, чем try / catch, стоит проверить API для WebControl.Тем не менее, выше должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...