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

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

18.06.2021, 20:24. Показов 8743. Ответов 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,175
Записей в блоге: 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,175
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru