Наблюдаемые Java в WPF?

java #c# #wpf #mvvm

#java #c# #wpf #mvvm

Вопрос:

Я.Разработчик Net и недавно разговаривал с моим приятелем, который является разработчиком Java.

Я объяснял о WPF MVVM и о том, как, если вы хотите, чтобы свойство обновлялось в представлении, вы должны не только привязать его к данным, но и запустить обработчик событий «OnPropertyChanged».

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

(Я знаю о наблюдаемых коллекциях, но даже им должен быть явно предоставлен обработчик событий для вызова при изменении коллекции)

Он утверждает, что эти «наблюдаемые» в Java не нуждаются в какой-либо специальной настройке и не нуждаются в вызове обработчиков событий, по умолчанию они обновляют представление только после объявления / инициализации.

Есть ли что-то подобное в WPF MVVM, я делал это неправильно или это вообще не так в Java?

Комментарии:

1. Множество фреймворков делают это reactiveui.net

2. Ваш приятель использовал RxJava , он реализован на нескольких языках. Вы можете изучить это в reactivex.io/languages.html

3. » наблюдаемые коллекции, но даже им должен быть явно предоставлен обработчик событий для вызова при изменении коллекции » — это заблуждение. Вы просто используете ObservableCollection вместо какого-либо другого типа списка. Элемент пользовательского интерфейса со свойством, привязанным к такой коллекции, автоматически зарегистрирует обработчик событий. Вам не нужно ничего делать вручную.

4. @Clemens, о, я подумал, что нам нужно предоставить обработчик для события «CollectionChanged».

Ответ №1:

Способ, которым WPF «автоматически узнает», когда обновлять целевое свойство, заключается в том, что исходный объект реализует INotifyPropertyChanged интерфейс и вызывает PropertyChanged событие для этого свойства. Вот как реализован механизм привязки.

Фреймворк не подписывается на некоторые другие «наблюдаемые» (что бы это ни значило в данном случае).

Итак, вы не ошиблись, если реализовали INotifyPropertyChanged и вызвали PropertyChanged событие в своих моделях представления.