Как реализовать сохранение rtf текста в базу данных и выгрузку его же из бд при помощи RichTextBox или другого элемента. В проекте использую wpf, mvvm. Возможен ли binding?
Можно написать такое поведение:
public class Rtf : Behavior<RichTextBox>
{
private bool editing = false;
public string Text
{
get => (string)GetValue(TextProperty);
set => SetValue(TextProperty, value);
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register(nameof(Text), typeof(string), typeof(Rtf),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, TextPropertyChangedCallback));
private static void TextPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var rtf = (Rtf)d;
if (rtf.editing) return;
if (rtf.AssociatedObject == null) return;
if (!(e.NewValue is string rtfText)) return;
var bytes = Encoding.UTF8.GetBytes(rtfText);
using (var stream = new MemoryStream(bytes))
{
rtf.AssociatedObject.SelectAll();
rtf.AssociatedObject.Selection.Load(stream, DataFormats.Rtf);
}
}
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.TextChanged += OnTextChanged;
}
protected override void OnDetaching()
{
AssociatedObject.TextChanged -= OnTextChanged;
base.OnDetaching();
}
private void OnTextChanged(object sender, TextChangedEventArgs e)
{
var textRange = new TextRange(
AssociatedObject.Document.ContentStart,
AssociatedObject.Document.ContentEnd);
using (var stream = new MemoryStream())
{
textRange.Save(stream, DataFormats.Rtf);
editing = true;
Text = Encoding.UTF8.GetString(stream.ToArray());
editing = false;
}
}
}
Тогда привязка будет выглядеть так:
<RichTextBox>
<i:Interaction.Behaviors>
<b:Rtf Text="{Binding RtfText}"/>
</i:Interaction.Behaviors>
</RichTextBox>
Значение свойства RtfText
можете хранить в БД — там будет RTF-документ со всем форматированием
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Код ниже (c# vs2010 winforms net40) определяет пользовательский текстбокс со свойствами "только для чтения" и "скрытым курсором"
Например так: нажал на левую сторону экрана - вывелось "Hi", а на правую - "Bye"Когда обе нажал - "Good"