在MVVM模式下,如何动态绑定一个ICommand到RichTextBox中超链接的点击事件上?
在MVVM模式下,如何动态绑定一个ICommand到RichTextBox中超链接的点击事件上?
你需要使用一个可绑定的RichTextBox,而不是WPF自带的那个不能绑定。详情请参见:http://michaelsync.net/2009/06/09/bindable-wpf-richtext-editor-with-xamlhtml-convertor
有了它,你就有了一个可以绑定到ViewModel中的FlowDocument的Rich Text Editor。
当创建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继承),并提供缺少的依赖属性,以便您可以使用数据绑定。
然而,为处理简单情况而创建新控件是低效的。在视图的代码后台文件中实现代码并不是被禁止的,这通常比创建新控件更有意义。
该项目的ViewModel示例展示了如何实现此操作的具体示例:
WPF应用程序框架(WAF)