Как привязать гиперссылку WPF в richtextbox к команде? - PullRequest
3 голосов
/ 06 августа 2009

С паттерном MVVM, как можно динамически связывать ICommand для события click гиперссылки внутри RichTextBox?

Ответы [ 2 ]

2 голосов
/ 06 августа 2009

Это всего несколько шагов, но вы можете сделать это.

  1. Вы должны использовать привязываемое расширенное текстовое поле, а не то, которое поставляется с WPF, которое нельзя привязать. Подробности здесь: http://michaelsync.net/2009/06/09/bindable-wpf-richtext-editor-with-xamlhtml-convertor

  2. Как только вы это сделаете, у вас будет Rich Text Editor, который вы сможете привязать к FlowDocument в вашей ViewModel.

  3. Когда ваш FlowDocument создан, подключите обработчик для Hyperlink.ClickEvent в вашей ViewModel:

Вот вызов, который добавляет обработчик в 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, но это путь.

1 голос
/ 29 августа 2009

Вы найдете множество сценариев, в которых невозможно использовать привязку данных wpf. В этих сценариях вы можете создать новый элемент управления (например, наследовать от RichTextBox) и предоставить отсутствующие свойства зависимостей, чтобы вы могли использовать привязку данных.

Однако создание нового элемента управления для обработки простых сценариев неэффективно. Не запрещается внедрять код в коде View файла, и это часто имеет больший смысл, чем создание нового элемента управления.

Конкретный пример того, как это можно сделать, показан в примере проекта ViewModel:

WPF Application Framework (WAF)

http://waf.codeplex.com

...