【发布时间】:2009-08-30 01:54:51
【问题描述】:
使用 MVVM 模式,如何进行动态绑定 一个 ICommand 到一个内部超链接的点击事件 富文本框?
【问题讨论】:
-
文本是如何填充的?
标签: mvvm richtextbox hyperlink data-binding
使用 MVVM 模式,如何进行动态绑定 一个 ICommand 到一个内部超链接的点击事件 富文本框?
【问题讨论】:
标签: mvvm richtextbox hyperlink data-binding
只需几个步骤即可到达,但您可以做到。
您必须使用可绑定的富文本框,而不是 WPF 附带的那种您无法绑定的富文本框。详情在这里:http://michaelsync.net/2009/06/09/bindable-wpf-richtext-editor-with-xamlhtml-convertor
完成后,您将拥有一个富文本编辑器,您可以将其绑定到 ViewModel 中的 FlowDocument。
创建 FlowDocument 后,在 ViewModel 中为 Hyperlink.ClickEvent 连接一个处理程序:
这是将处理程序添加到 FlowDoc 的调用
TheDocument.AddHandler(Hyperlink.ClickEvent,
new RoutedEventHandler(HandleHyperlinkClick));
//Here's the handler definition
private void HandleHyperlinkClick(object sender, RoutedEventArgs args)
{
Hyperlink link = args.Source as Hyperlink;
//...
}
这是我见过的唯一一件事情。 FlowDocuments 有点奇怪,因为它们是一种数据类型和一种视觉元素,所以从某种意义上说,将它驻留在您的 ViewModel 中感觉不对,但这是要走的路。
【讨论】:
您会发现很多无法使用 wpf 数据绑定的场景。在这些情况下,您可以创建一个新控件(例如,从 RichTextBox 继承)并提供缺少的依赖属性,以便您可以使用数据绑定。
但是,创建一个新控件来处理简单的场景是低效的。不禁止在 View 的代码隐藏文件中实现代码,这通常比创建新控件更有意义。
项目的 ViewModel 示例中显示了如何做到这一点的具体示例:
WPF 应用程序框架 (WAF)
【讨论】: