Kolorowanie fragmentu tekstu w RichTextBox ale z poziomu ViewModelu

0

z poziomu WinForms zakolorowanie tekstu w RichTextBox w kodzie okna widoku robiłem tak:

rTxtBox_OdczytZ_PlanuZapisow.Select(indexStartKolorowania, dlugoscZakolorowania);
rTxtBox_OdczytZ_PlanuZapisow.SelectionBackColor = Color.Yellow;

w WPF z poziomu metody okna robię tak:

   public partial class MainWindow : Window
   {
        public MainWindow()
        {
            InitializeComponent();
            DodajTekstDo_RichTextBox("N:02:AG:45:Y3");
        }
        public void DodajTekstDo_RichTextBox(string nazwaWlasciwa)
        {
            var fd = new FlowDocument();

            Paragraph tekst = new Paragraph();

            tekst.Inlines.Add(new Run("Przednaźwie nazwy właściwej (1): "));
            tekst.Inlines.Add(new Run(nazwaWlasciwa) { Background = Brushes.Yellow, FontWeight = FontWeights.Bold });
            tekst.Inlines.Add(new Run(" ponaźwie nazwy właściwej (1).") { Background = Brushes.LightBlue });
            tekst.Inlines.Add(new Run(Environment.NewLine));
            tekst.Inlines.Add(new Run("Przednaźwie nazwy właściwej (2): "));
            tekst.Inlines.Add(new Run(nazwaWlasciwa.ToUpper()) { Background = Brushes.Yellow, FontWeight = FontWeights.Bold });
            tekst.Inlines.Add(new Run(" ponaźwie nazwy właściwej (2).") { Background = Brushes.LightBlue });

            fd.Blocks.Add(tekst);

            rTxtBox_OdczytZ_Mapowania.Document = fd;
        }
        (...)
   }

Wynik tego kodu powyzej:
obraz_2022-11-07_182539148.png

chciałbym to jakoś wciągnąć aby robić to z poziomu ViewModelu
Jak to zrobić dobrze w zgodzie z MVVM, bo próbując "na skróty" wciągając element widoku FlowDocument do ViewModelu nie da się, okazuje się ze nie można bindować do właściwości Document kontrolki RichTextBox bo nie jest DependencyProperty?

public class MainViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string nazwaWlasciwosci)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(nazwaWlasciwosci));
        }

        public MainViewModel()
        {
            poleZmapowanych = new FlowDocument();
        }

        private FlowDocument poleZmapowanych;
        public FlowDocument PoleZmapowanych
        {
            get { return poleZmapowanych; }
            set { poleZmapowanych = value;
                OnPropertyChanged(nameof(PoleZmapowanych));
            }
        }
    }

proba bindowania

<RichTextBox IsEnabled="False" x:Name="rTxtBox_OdczytZ_Mapowania" Document="{Binding PoleZmapowanych}"/>
2

Za czasów C++ najlpeszą kontrolką do procesowania tekstu "na styl programistyczny" była Scintilla
https://www.scintilla.org/
Ma wrapper do C#

O onym czasie tłukłem głową w ścianę w RichTextBoxie, aż to znalazłem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1