当前位置:  开发笔记 > 编程语言 > 正文

模型使用WebBrowser在WPF中查看ViewModel

如何解决《模型使用WebBrowser在WPF中查看ViewModel》经验,为你挑选了3个好方法。

我正在使用MVVM模式在WPF中编写应用程序,其中我限制绑定到属性和命令exclusivley

但是,我想使用WebBrowser控件,它只能将内容的html字符串作为参数传递给mthod,而不是属性.

我打算创建一个从Webbrowser派生的具有必需属性的新控件,但控件类是密封的.我尝试创建一个包装器控件,但是我遇到了依赖属性的各种问题,这些问题似乎比我可能遇到的问题更难解决.

有没有什么办法可以将参数(字符串)推送到MVVM的方法中,而不需要在代码隐藏文件中使用代码(这是一个很大的禁忌).

谢谢

院长



1> jbe..:

为什么代码隐藏文件中的任何代码都没有?我相信这是MVVM社区中最常见的误解之一.

MVVM不是消除背后代码的模式.它是将视图部分(外观,动画等)与逻辑部分(工作流)分开.此外,您还可以对逻辑部件进行单元测试.

我知道你必须编写代码的足够场景,因为数据绑定不是解决所有问题的方法.可以在此处找到使用代码并仍然实现MVVM分离的示例应用程序:

WPF应用框架(WAF)



2> 小智..:

我用过这里找到的解决方案

在WPF中数据绑定WebBrowser的Source属性

HTH



3> Adrian..:

我不完全确定我理解这个问题(你想在WebBrowser上调用一个方法,但需要一个html字符串才能这样做?).

MVVM不是像瘟疫那样避免代码隐藏,而是关于将代码隐藏文件降级为严格的UI任务.

如果将UI设置为包含典型的Address Bar + Go按钮,则需要使用Buttons的Click处理程序将字符串传递给浏览器.或者,字符串可以是ViewModel的属性,您可以通过将其绑定到WebBrowser的Tag属性来轻松地收集它.

您的UI将大致如下所示:

 

您的代码隐藏可能如下所示:

void NavigateButton_Click(object sender, RoutedEventArgs e)
{
   browser.Navigate(new Uri(addressBar.Text)); // Address Bar
   browser.Navigate(new Uri(browser.Tag.ToString()); // Tag Binding
}

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有