Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memudahkan Pengikatan Data untuk Dokumen WPF RichTextBox?
Apabila cuba melaksanakan pengikatan data untuk dokumen WPF RichTextBox, terdapat dua penyelesaian utama: buat kelas terbitan RichTextBox tersuai dengan sifat bergantung atau gunakan kaedah "proksi". Walau bagaimanapun, masih terdapat ruang untuk penambahbaikan dalam kaedah ini.
Penyelesaian dipermudah menggunakan atribut yang dilampirkan
Alternatif yang lebih mudah ialah mencipta atribut DocumentXaml
tambahan. Sifat ini membenarkan pengikatan RichTextBox dengan mudah pada dokumen. Cara penggunaannya adalah seperti berikut:
<code class="language-xml"><textbox text="{Binding FirstName}"></textbox><textbox text="{Binding LastName}"></textbox><richtextbox local:richtextboxhelper.documentxaml="{Binding Autobiography}"></richtextbox></code>
Pencapaian
DocumentXaml
Pelaksanaan sifat yang dilampirkan berkisar pada memuatkan XAML (atau RTF) ke dalam FlowDocument baharu apabila menetapkan sifat tersebut. Sebaliknya, apabila FlowDocument berubah, nilai harta akan dikemas kini.
Kod berikut merangkumi pelaksanaan:
<code class="language-csharp">public class RichTextBoxHelper : DependencyObject { 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; // 将XAML解析为文档 var doc = new FlowDocument(); var range = new TextRange(doc.ContentStart, doc.ContentEnd); range.Load(new MemoryStream(Encoding.UTF8.GetBytes(GetDocumentXaml(richTextBox))), DataFormats.Xaml); // 设置文档 richTextBox.Document = doc; // 文档更改时更新源 range.Changed += (obj2, e2) => { if (richTextBox.Document == doc) { MemoryStream buffer = new MemoryStream(); range.Save(buffer, DataFormats.Xaml); SetDocumentXaml(richTextBox, Encoding.UTF8.GetString(buffer.ToArray())); } }; } }); }</code>
Kaedah ini menyediakan pilihan yang mudah untuk mengikat dokumen RichTextBox tanpa memerlukan penyelesaian yang rumit atau kawalan komersial.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memudahkan Pengikatan Data untuk Dokumen WPF RichTextBox?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!