단순화된 WPF RichTextBox 데이터 바인딩
WPF의 데이터 바인딩 RichTextBox
은 까다로울 수 있습니다. 그러나 더 쉬운 대안이 있습니다.
추가 DocumentXaml 속성
RichTextBox
에서 상속하는 대신 DocumentXaml
의 문서 콘텐츠에 직접 바인딩할 수 있는 추가 RichTextBox
속성을 만들 수 있습니다. 구현은 다음과 같습니다.
<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>
사용법:
<code class="language-xml"><TextBox Text="{Binding FirstName}"></TextBox> <TextBox Text="{Binding LastName}"></TextBox> <RichTextBox local:RichTextBoxHelper.DocumentXaml="{Binding Autobiography}"></RichTextBox></code>
이 추가 속성을 사용하면 RichTextBox
의 문서를 데이터 모델 속성에 쉽게 바인딩할 수 있습니다. 코드는 XAML 콘텐츠를 FlowDocument
로 구문 분석하고 문서가 변경될 때 바인딩을 업데이트하는 작업을 처리합니다.
XamlPackage 형식의 장점:
XAML 패키지 형식은 이미지 포함, 유연성 향상 등 일반 XAML에 비해 장점이 있습니다. 데이터 바인딩 요구 사항에 따라 XamlPackage를 사용하는 것이 좋습니다.
결론:
첨부된 DocumentXaml
속성을 사용하면 WPF에서 RichTextBox
의 데이터 바인딩을 수행하는 간단한 방법을 제공합니다. 이 솔루션을 사용하여 RichTextBox
컨트롤의 데이터 바인딩 요구 사항을 단순화하세요.
위 내용은 WPF RichTextBox에서 데이터 바인딩을 단순화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!