使用WebBrowser的WPF中的模型视图模型

使用WebBrowser的WPF中的模型视图模型,wpf,mvvm,browser,Wpf,Mvvm,Browser,我正在使用MVVM模式在WPF中编写一个应用程序,在这里,我仅限于绑定到属性和命令 但是,我想使用WebBrowser控件,它只能将内容的html字符串作为mthod的参数,而不是属性 我打算创建一个从Webbrowser派生的新控件,该控件具有必需的属性,但该控件类是密封的。我尝试创建一个包装器控件,但我在依赖属性方面遇到了各种各样的问题,这些问题似乎比我所能解决的更麻烦 有没有什么方法可以将参数(字符串)推入带有MVVM的方法中,而不用求助于代码隐藏文件中的代码(这是一个很大的禁忌) 谢谢

我正在使用MVVM模式在WPF中编写一个应用程序,在这里,我仅限于绑定到属性和命令

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

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

有没有什么方法可以将参数(字符串)推入带有MVVM的方法中,而不用求助于代码隐藏文件中的代码(这是一个很大的禁忌)

谢谢


Dean

我不能完全确定我是否理解这个问题(您想在WebBrowser上调用一个方法,但需要一个html字符串来完成吗?)

MVVM不是像瘟疫一样避免代码隐藏,而是将代码隐藏文件降级到严格的UI任务中

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

您的UI大致如下所示:

<TextBox x:Name="addressBar" /> <!-- If you use the address bar -->
<Button Content="Go" Click="NavigateButton_Click" />
<WebBrowser x:Name="browser" Tag="{Binding URL}" />  <!-- If you bind to a VM property -->
void NavigateButton_Click(object sender, RoutedEventArgs e)
{
   browser.Navigate(new Uri(addressBar.Text)); // Address Bar
   browser.Navigate(new Uri(browser.Tag.ToString()); // Tag Binding
}

我使用了这里找到的解决方案


HTH

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

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

我知道有足够多的场景需要编写代码,因为数据绑定并不是解决所有问题的解决方案。使用代码隐藏但仍满足MVVM分离的示例应用程序可以在以下位置找到:


是的,附加属性是使非依赖属性上的绑定成为可能的简单方法