Windows phone 7 MVVM中的WP7 WebBrowser

Windows phone 7 MVVM中的WP7 WebBrowser,windows-phone-7,Windows Phone 7,我正在MVVMWP7应用程序中使用WebBrowser控件。我使用了一个附加属性来允许将控件绑定到生成的HTML字符串,如中所述。附加属性绑定到生成HTML代码的虚拟机。问题是代码是在控件完全加载之前生成的,所以当VM属性更改时,我会得到一个异常: 只有在WebBrowser方法位于可视树中时,才能调用它 我可以使用一些“黑客”方法,比如完全避免绑定,而是从我的虚拟机中触发一个事件,让视图处理它,并在加载之前将调用pospone到WebBrowser.NavigateToString,但我想知道

我正在MVVMWP7应用程序中使用WebBrowser控件。我使用了一个附加属性来允许将控件绑定到生成的HTML字符串,如中所述。附加属性绑定到生成HTML代码的虚拟机。问题是代码是在控件完全加载之前生成的,所以当VM属性更改时,我会得到一个异常:

只有在WebBrowser方法位于可视树中时,才能调用它


我可以使用一些“黑客”方法,比如完全避免绑定,而是从我的虚拟机中触发一个事件,让视图处理它,并在加载之前将调用pospone到WebBrowser.NavigateToString,但我想知道是否有人可以建议一个更好的,更优雅的方式…

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

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,如果抛出异常,处理加载的事件(在可视化树中呈现控件时发生),则提供HTML


可能有比try/catch更好的方法,值得检查
WebControl
的API。不过,上面的方法应该可以使用。

谢谢,我也不太喜欢基于异常的方法,但它肯定比视图中的一堆代码要好。。。