我正在使用MVVM模式在WPF中编写应用程序,其中我限制绑定到属性和命令exclusivley
但是,我想使用WebBrowser控件,它只能将内容的html字符串作为参数传递给mthod,而不是属性.
我打算创建一个从Webbrowser派生的具有必需属性的新控件,但控件类是密封的.我尝试创建一个包装器控件,但是我遇到了依赖属性的各种问题,这些问题似乎比我可能遇到的问题更难解决.
有没有什么办法可以将参数(字符串)推送到MVVM的方法中,而不需要在代码隐藏文件中使用代码(这是一个很大的禁忌).
谢谢
院长
为什么代码隐藏文件中的任何代码都没有?我相信这是MVVM社区中最常见的误解之一.
MVVM不是消除背后代码的模式.它是将视图部分(外观,动画等)与逻辑部分(工作流)分开.此外,您还可以对逻辑部件进行单元测试.
我知道你必须编写代码的足够场景,因为数据绑定不是解决所有问题的方法.可以在此处找到使用代码并仍然实现MVVM分离的示例应用程序:
WPF应用框架(WAF)
我用过这里找到的解决方案
在WPF中数据绑定WebBrowser的Source属性
HTH
我不完全确定我理解这个问题(你想在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 }