Привязка данных Winforms с пользовательским установщиком

Я использую старый добрый Fash DataBinding в проекте Winforms.

У меня есть форма с элементом управления (DevExpress RichTextEdit для тех, кто хочет знать)

Я хочу связать свойство HtmlText элемента управления richTextEdit со свойством в моей ViewModel

Я сделал это связывание, и это не проблема. Однако я понял, что HtmlText, который выходит из richTextEdit, является HtmlEncoded. Это означает, что символы закодированы в их html-представлении. например, < становится &lt; так далее

Я не хочу, чтобы это произошло, поскольку эти теги имеют особое значение в дальнейшем, и мне нужно их сохранить.

Так что в моей ViewModel, в которой все свойства свойства notify изменились, и, по сути, оборачивает мой объект домена, я мог бы сделать это

public class ViewModel: INotifyPropertyChanged
{
    public string WrappedProperty
    {
        get => domainObject.Property;
        set
        {
            domainObject.Property = HttpUtility.DecodeHtml(value);
            //Raise Property changed event etc
        }
    }
}

и в своей форме я создаю привязку данных

Binding binding = new Binding("HtmlText", _viewModel, "WrappedProperty", true, DataSourceUpdateMode.OnPropertyChanged,null,null);
_richEditControl.DataBindings.Add(binding);

теперь это работает как задумано, однако мне это не нравится. Моя модель представления делает что-то из-за контроля, который я использую в настоящее время. Это «дырявый» и пахнет.

Я хочу, чтобы мой Просмотр обрабатывал определенные проблемы.

Я хотел бы создать привязку между свойством Html Text элементов управления и моим свойством WrappedProperty моделей представления, предоставляя настраиваемую функцию, которая будет использоваться при установке свойства из элемента управления в модель представления. Это что-то, что может быть реализовано или есть какая-то общая работа вокруг шаблона, который я пропускаю?

Спасибо

Всего 1 ответ


Мне удалось выяснить это сам, но, пытаясь какое-то время найти что-то в Google, я подумал, что я сам и, надеюсь, помогу будущим разработчикам.

На Binding есть событие под названием Parse. Подписка на это событие позволяет вам работать со значением до того, как оно будет отправлено обратно в источник данных.

Его партнером является событие «Формат», позволяющее обработать значение до его отображения в элементе управления.

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.binding.parse?view=netframework-4.8


Есть идеи?

10000