Привязка данных Winforms с пользовательским установщиком - PullRequest
0 голосов
/ 16 мая 2019

Я использую старую старую привязку 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 Ответ

0 голосов
/ 16 мая 2019

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

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

Его партнером является событие Format, которое позволяет вам работать со значением до его отображения в элементе управления * 1005.*

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...