gpt4 book ai didi

windows-phone-7 - MVVM 中的 WP7 Web 浏览器

转载 作者:行者123 更新时间:2023-12-04 06:51:50 24 4
gpt4 key购买 nike

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

You cannot call WebBrowser methods until it is in the visual tree.

我可以使用一些“黑客”,比如完全避免绑定(bind),而是从我的虚拟机触发一个事件,让 View 处理它并推迟对 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,如果引发异常,则处理 Loaded 事件(当控件在可视化树中呈现时发生),然后提供 HTML。

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

关于windows-phone-7 - MVVM 中的 WP7 Web 浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6402609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com