Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/41: Рейтинг темы: голосов - 41, средняя оценка - 4.90
1 / 1 / 1
Регистрация: 26.04.2021
Сообщений: 31
WPF

Привязка RichTextBox к свойству

18.06.2021, 20:24. Показов 8762. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

В моей программе для заметок существует EditorView - View текстового редактора (взят как пример отсюда: https://www.wpf-tutorial.com/r... -редактор/). На данный момент логика, которая в нём реализована происходит в код бехайнд. К тому же, там используются диалоговые окна для выбора текстового файла, а мне в программе нужно реализовать это кодом (путь для сохранения/загрузки задаётся при помощи переменных в процессе использования программы). Код XAML EditorView:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<UserControl x:Class="SomeApp.Views.EditorView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:SomeApp.Views" 
             xmlns:res="clr-namespace:SomeApp.Resources"
             xmlns:vm="clr-namespace:SomeApp.ViewModels"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <!--<UserControl.CommandBindings>
        <CommandBinding Command="ApplicationCommands.Delete" Executed="Delete_Executed" />
        <CommandBinding Command="ApplicationCommands.Save" Executed="Save_Executed" />
    </UserControl.CommandBindings>-->
 
    <UserControl.DataContext>
        <vm:EditorVM/>
    </UserControl.DataContext>
 
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="0.07*"/>
            <RowDefinition Height="0.06*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <DockPanel Grid.Row="0" MaxHeight="40">
            <ToolBar DockPanel.Dock="Top">
                <ToggleButton Command="EditingCommands.ToggleBold" Name="btnBold" Content="Жирный" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
                <ToggleButton Command="EditingCommands.ToggleItalic" Name="btnItalic" Content="Курсив" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
                <ToggleButton Command="EditingCommands.ToggleUnderline" Name="btnUnderline" Content="Подчёркнутый" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
                <Separator />
                <ComboBox Name="cmbFontFamily" SelectionChanged="cmbFontFamily_SelectionChanged" Width="150" VerticalAlignment="Stretch"/>
                <ComboBox Name="cmbFontSize" IsEditable="True" TextBoxBase.TextChanged="cmbFontSize_TextChanged" Width="40" VerticalAlignment="Stretch"/>
                <Separator />
                <Button Name="SaveNote" Content="Сохранить изменения" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
                <Separator />
                <Button Name="DeleteNote" Content="Удалить заметку" Width="100" VerticalAlignment="Stretch"/>
            </ToolBar>
        </DockPanel>
        <TextBox Text="{Binding EditorHeader, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Grid.Row="1" FontFamily="Times New Roman" FontSize="18" VerticalAlignment="Center"/>
        <RichTextBox x:Name="rtbEditor" Grid.Row="2" DataContext="{Binding EditorTextRange, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
    </Grid>
</UserControl>
И в нём находится RichTextBox, TextRange которого нужно привязать к свойству в EditorVM:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class EditorVM : BaseVM
    {
        private static string _editorHeader;
        public static string EditorHeader
        {
            get => _editorHeader;
            set
            {
                _editorHeader = value;
            }
        }
 
        private static string _editorselectedDate;
        public static string EditorSelectedDate
        {
            get => _editorselectedDate;
            set
            {
                _editorselectedDate = value;
            }
        }
 
        private static TextRange _editorTextRange;
        public static TextRange EditorTextRange
        {
            get => _editorTextRange;
            set
            {
                _editorTextRange = value;
            }
        }
TextBox в EditorView привязывается к названию заметки, а RichTextBox - к её тексту (TextRange). Вопрос, собственно, в том, как правильно связывать RichTextBox и получать TextRange из существующего файла или записывать TextRange, который будет находится в RichTextBox в файл (то есть осуществлять загрузку и сохранение) в рамках MVVM.

Более подробно: сперва открывается окно программы. В верхнем левом углу находится календарь. При клике на дату в нём, программа проверяет, существуют ли заметки на выбранный день. Если нет, то она предлагает ввести название заметки и создать её. После этого, открывается EditorView - текстовый редактор. Пользователь записывает туда нужный ему текст, нажимает на кнопку "Сохранить изменения". Программа создаёт .rtf файл, названием которого является название самой заметки, а путь это файла - текущая директория программы/Notes/выбранная пользователем дата/название_заметки.rtf.

Надеюсь, что понятно объяснила вопрос. Заранее большое спасибо за любую помощь.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.06.2021, 20:24
Ответы с готовыми решениями:

Привязка цвета к свойству
Есть класс PointData со свойством OnOff(отвечающий за цвет точки) если оно true; тогда свойство OnOffColor =...

Привязка к свойству класса
Приветствую, ребята! Подскажите пожалуйста, как сделать привязку элемента к свойству класса? Т.е. есть некий класс (ViewModel), в нем есть...

Привязка текста кнопки к свойству
Приветствую. В чём заключается задача: по нажатию на кнопку асинхронно происходит копирование файлов по разным путям. Поэтому хотелось бы...

22
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
23.06.2021, 15:14
Студворк — интернет-сервис помощи студентам
Codebot, протестировали?
Всё нормально работает?
0
82 / 9 / 1
Регистрация: 31.05.2016
Сообщений: 336
27.11.2021, 14:30
Цитата Сообщение от Элд Хасп Посмотреть сообщение
using Simplified;
А где взять онное
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
27.11.2021, 15:46
Цитата Сообщение от Segeja Посмотреть сообщение
А где взять онное
Простые реализации для тем на форуме
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2021, 15:46

Привязка к свойству базового класса
привет форумчане, у меня на самом деле xamarin проект, но привязки и в впф работают аналогично, поэтому пишу сюда) ветка xamarin...

Привязка данных к изменямому в кодк свойству
Доброго дня! Столкнулась с проблемой привязки TextBox.Text или TextBlock.Text к свойству изменяемому в коде. Для того, чтобы...

Привязка данных к кастомному свойству зависимости
Всем привет. Появился потребность передать в UserControl некую информацию, а точнее привзяать эту информацию к свойству, которое нужно для...

GridViewColumn привязка к свойству Width другого элемента
Всем привет! Не могу разобраться с ListView. У меня 2 проблемы: 1. Не работает привязка свойства Width элемента GridViewColumn к...

Привязка TextBox.Text и DataGrid.SelectedItem к одному свойству
Добрый вечер! Про DataGrid много создано тем, но найти решение возникшей проблемы не удалось (может быть плохо искала). Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru