WPF, Webbrowser & Content DataBinding

Aujourd’hui j’ai été confronté a un petit problème. Je voulais afficher les résultats d’une recherche avec une mise en forme un peut travailler à la manière des résultats retourné par les recherches dans l’ancien HelpViewer de la MSDN 2008. (Bien meilleur que celui actuel, malgré le retour en arrière fait sur le v1.1 qui reste énormément moins ergonomique à mon gout et beaucoup plus lent, fin’ bref…)

Pour cela j’avais l’idée de rajoute comme result viewer un webbrowser intégré dont le contenu serait bindé a un string contenant la page html avec les résultats mis en forme. Seul hic a cette solution, impossible actuellement de binder le contenu d’un webbrowser avec le moteur de binding wpf…

Voici donc une petite Attached Property qui vous permettra de passer outre ce petit problème.

public class WebBrowserHelper {
    public static readonly DependencyProperty BodyProperty =
           DependencyProperty.RegisterAttached("Body",
                                               typeof(string),
                                               typeof(WebBrowserHelper),
                                               new PropertyMetadata(OnBodyChanged));

    public static string GetBody(DependencyObject dependencyObject)
    {
        return (string)dependencyObject.GetValue(BodyProperty);
    }

    public static void SetBody(DependencyObject dependencyObject, string body)
    {
        dependencyObject.SetValue(BodyProperty, body);
    }

    private static void OnBodyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var webBrowser = (WebBrowser)d;
        webBrowser.NavigateToString((string)e.NewValue);
    }
}

Il suffit de rajouter la classe et de rajouter une référence vers son mainspace dans les xmlns de votre contrôle. Ensuite on l’utilise comme ceci :

<WebBrowser src:WebBrowserHelper.Body="{Binding MyHtml}" />

A vous les joie du binding avec un control WebBrowser en Wpf ^^

Inform@tiquement
Istace Emmanuel

Src : http://thomasfreudenberg.com/blog/archive/2010/08/01/binding-webbrowser-content-in-wpf.aspx

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s