> 백엔드 개발 > C++ > WPF RichTextBox에서 데이터 바인딩을 단순화하려면 어떻게 해야 합니까?

WPF RichTextBox에서 데이터 바인딩을 단순화하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2025-01-08 08:37:45
원래의
532명이 탐색했습니다.

How Can I Simplify Data Binding in a WPF RichTextBox?

단순화된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿