2009-08-06 3 views

Antwort

2

Es ist ein paar Schritte, um dorthin zu gelangen, aber Sie können es tun.

  1. Sie müssen eine bindbare Rich-Text-Box verwenden, anstatt die, die mit WPF geliefert wird, die Sie nicht binden können. Details hier: http://michaelsync.net/2009/06/09/bindable-wpf-richtext-editor-with-xamlhtml-convertor

  2. Sobald Sie, dass, haben Sie einen Rich-Text-Editor, den Sie ein Flowdocument in Ihrem Ansichtsmodell binden können.

  3. Wenn Ihr Flowdocument erstellt wird, hookup einen Handler für das Hyperlink.ClickEvent in Ihrem Ansichtsmodell:

Hier ist der Aufruf, der die Prozedur der 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; 
    //... 
} 

Dies ist der hinzufügt, ist nur was ich je gesehen habe. FlowDocuments sind ein wenig merkwürdig, weil sie eine Art Datentyp und eine Art visuelles Element sind, so dass es sich in gewisser Hinsicht falsch anfühlt, wenn es sich in Ihrem ViewModel befindet, aber das ist der richtige Weg.

+0

Ich versuche das jetzt, aber nichts passiert, wenn ich auf einen Link klicke! Der Cursor ändert sich nicht in eine Hand ... keine Hilfe? – bluebit

+0

Ich denke, dass Sie den AddHandler-Aufruf möglicherweise verpassen? Ich habe die Formatierung geändert, damit sie einfacher zu sehen ist. –

+0

Vielen Dank! Es funktionierte, aber wenn ich auf Hyperlink klicke, wird die URL zweimal angezeigt! Was ist los mit dir? –

1

Sie finden viele Szenarien, in denen es nicht möglich ist, wpf Datenbindung zu verwenden. In diesen Szenarien können Sie ein neues Steuerelement erstellen (z. B. von RichTextBox erben) und die fehlenden Abhängigkeitseigenschaften bereitstellen, sodass Sie die Datenbindung verwenden können.

Das Erstellen eines neuen Steuerelements für die Handhabung einfacher Szenarien ist jedoch ineffizient. Es ist nicht verboten, Code in den Code des Views hinter der Datei zu implementieren, was oft mehr Sinn macht, als ein neues Steuerelement zu erstellen.

Ein konkretes Beispiel dafür, wie dies erreicht werden kann, ist in der Ansichtsmodell Probe des Projektes gezeigt:

WPF Application Framework (WAF)

http://waf.codeplex.com