MVVM中的WP7 WebBrowser

时间:2011-06-19 13:28:41

标签: windows-phone-7

我在MVVM WP7应用程序中使用WebBrowser控件。我使用附加属性来允许将控件绑定到生成的HTML字符串,如http://compiledexperience.com/blog/posts/binding-html-to-the-web-browser-control中所述。附加属性绑定到我的VM,生成HTML代码。问题是代码是在控件完全加载之前生成的,因此当VM属性发生变化时会出现异常:

  

在可视树中,您无法调用WebBrowser方法。

我可以使用一些“hack”,比如完全避免绑定,而是从我的VM中激活一个事件并让视图处理它,然后调用WebBrowser.NavigateToString,直到它被加载,但我想知道是否有人可以提出一个更好,更优雅的方式...

1 个答案:

答案 0 :(得分:6)

我认为最好的办法是修复附加属性,使其正常工作。这是一个建议:

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更好的方法,值得检查WebControl的API。但是,上述情况应该有效。