Я использую старый добрый Fash DataBinding в проекте Winforms.
У меня есть форма с элементом управления (DevExpress RichTextEdit для тех, кто хочет знать)
Я хочу связать свойство HtmlText элемента управления richTextEdit со свойством в моей ViewModel
Я сделал это связывание, и это не проблема. Однако я понял, что HtmlText, который выходит из richTextEdit, является HtmlEncoded. Это означает, что символы закодированы в их html-представлении. например, <
становится <
так далее
Я не хочу, чтобы это произошло, поскольку эти теги имеют особое значение в дальнейшем, и мне нужно их сохранить.
Так что в моей 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