У меня есть UserControl, с TextBox и свойством привязки к данным - Value.
Значением может быть любой объект, такой как цвет, массив, шрифт и т. Д.
Каждый раз, когда изменяется текст, свойство Value изменяется до тех пор, пока оно действительно.
Просмотр статьи MSDN: Как: применить шаблон PropertyNameChanged
, он говорит, что я должен использовать шаблон PropertyNameChanged Event
со стороны управления.
Теперь, если у меня DataSourceUpdateMode = OnValidate, мне даже не нужно применять этот шаблон. Если, скажем. мое свойство Value привязано к цветному полю в бизнес-объекте, затем после ввода красного цвета в текстовом поле и перехода к другому полю, а затем любые другие поля в форме, которые привязываются к тому же цветному полю, обновляются немедленно.
Если, однако, мой DataSourceUpdateMode = OnPropertyChange, я ожидаю, что все другие поля в форме обновятся, как только я нажму 'd' (как в 're'd').
Этого не происходит.
Итак, я применяю вышеупомянутый шаблон PropertyNameChanged, но этого все еще не происходит.
Однако, если я удаляю событие PropertyNameChanged и, вместо этого, использую INotifyPropertyChanged, он работает отлично.
Моя проблема в том, что согласно статье, INotifyPropertyChanged должен использоваться вашими бизнес-объектами, а не пользовательским элементом управления.
Это работает, но я не хочу сталкиваться с какими-либо проблемами в будущем.
Кто-нибудь знает, что происходит?
ETA:
Предполагая, что можно использовать INotifyPropertyChanged, у меня теперь есть еще одна проблема.
Я не хочу, чтобы пользователям приходилось подписываться на событие PropertyChanged, а затем проверять аргументы, чтобы узнать, послало ли его свойство Value.
Итак, добавляю:
Public Event ValueChanged As EventHandler(Of EventArgs)
Это нарушает привязку. Источник даже не обновляется при проверке, не говоря уже об изменении свойства.
Полагаю, мне нужно переименовать событие ValueChanged в FeckingValueChanged или что-то в этом роде.
Я бы не возражал, если бы фреймворк действительно что-то делал с вызванным событием ValueChange, во-первых!