Maison > développement back-end > C++ > Comment puis-je simplifier la liaison de données dans une RichTextBox WPF ?

Comment puis-je simplifier la liaison de données dans une RichTextBox WPF ?

Patricia Arquette
Libérer: 2025-01-08 08:37:45
original
497 Les gens l'ont consulté

How Can I Simplify Data Binding in a WPF RichTextBox?

Liaison de données WPF RichTextBox simplifiée

La liaison de données pour WPF RichTextBox peut être délicate. Il existe cependant une alternative plus simple.

Propriétés DocumentXaml supplémentaires

Au lieu d'hériter de RichTextBox, vous pouvez créer un attribut DocumentXaml supplémentaire qui vous permet de vous lier directement au contenu du document de RichTextBox. La mise en œuvre est la suivante :

<code class="language-csharp">public static class RichTextBoxHelper
{
    public static string GetDocumentXaml(DependencyObject obj) =>
        (string)obj.GetValue(DocumentXamlProperty);

    public static void SetDocumentXaml(DependencyObject obj, string value) =>
        obj.SetValue(DocumentXamlProperty, value);

    public static readonly DependencyProperty DocumentXamlProperty =
        DependencyProperty.RegisterAttached(
            "DocumentXaml", typeof(string), typeof(RichTextBoxHelper),
            new FrameworkPropertyMetadata
            {
                BindsTwoWayByDefault = true,
                PropertyChangedCallback = (obj, e) =>
                {
                    var richTextBox = (RichTextBox)obj;
                    var doc = new FlowDocument();

                    var xaml = GetDocumentXaml(richTextBox);
                    var range = new TextRange(doc.ContentStart, doc.ContentEnd);
                    range.Load(new MemoryStream(Encoding.UTF8.GetBytes(xaml)),
                        DataFormats.Xaml);

                    richTextBox.Document = doc;

                    range.Changed += (obj2, e2) =>
                    {
                        if (richTextBox.Document == doc)
                        {
                            using var buffer = new MemoryStream();
                            range.Save(buffer, DataFormats.Xaml);
                            SetDocumentXaml(richTextBox,
                                Encoding.UTF8.GetString(buffer.ToArray()));
                        }
                    };
                }
            });
}</code>
Copier après la connexion

Utilisation :

<code class="language-xml"><TextBox Text="{Binding FirstName}"></TextBox>
<TextBox Text="{Binding LastName}"></TextBox>
<RichTextBox local:RichTextBoxHelper.DocumentXaml="{Binding Autobiography}"></RichTextBox></code>
Copier après la connexion

Cet attribut supplémentaire vous permet de lier facilement le document de RichTextBox à une propriété de modèle de données. Le code gère l'analyse du contenu XAML dans FlowDocument et la mise à jour de la liaison lorsque le document change.

Avantages du format XamlPackage :

Le format de package XAML présente des avantages par rapport au XAML simple, tels que l'inclusion d'images et une plus grande flexibilité. Pensez à utiliser XamlPackage pour vos besoins de liaison de données.

Conclusion :

L'utilisation de l'attribut DocumentXaml ci-joint fournit un moyen simple d'effectuer la liaison de données de RichTextBox dans WPF. Simplifiez les besoins de liaison de données de votre contrôle RichTextBox avec cette solution.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal