MVVM中的WP7 WebBrowser

Naf*_*tis 2 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,直到它被加载,但我想知道是否有人可以提出更好的建议,更优雅的方式......

Col*_*inE 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);
           }
    }

}
Run Code Online (Sandbox Code Playgroud)

上面的代码尝试显示HTML,如果抛出异常,则处理Loaded事件(在可视树中呈现控件时发生),然后提供HTML.

可能有比try/catch更好的方法,值得检查API WebControl.但是,上述应该有效.