【问题标题】:Java observables in WPF?WPF 中的 Java 可观察对象?
【发布时间】:2021-09-08 12:18:18
【问题描述】:

我是一名 .Net 开发人员,最近与我的一位 Java 开发人员交谈。

我正在解释 WPF MVVM 以及如何在视图中更新属性,不仅必须对其进行数据绑定,还必须触发“OnPropertyChanged”事件处理程序。

他很震惊没有现成的包装纸。例如,他告诉我Java中有“Observable String”,如果后端发生更改,它会自动知道更新视图中的值。

(我知道可观察的集合,但即使是它们也必须明确地被赋予一个事件处理程序以在集合更改时调用)

他声称 Java 中的这些“可观察对象”不需要任何特殊设置,也不需要提供事件处理程序来调用,默认情况下,它们仅在声明/初始化后更新视图。

在 WPF MVVM 中是否有这样的事情,我做错了还是在 Java 中根本不是这样?

【问题讨论】:

  • 很多框架都可以做到这一点reactiveui.net
  • 你的好友使用了RxJava,它是用多种语言实现的。你可以在reactivex.io/languages.html学习它
  • 可观察的集合,但即使是它们也必须明确地被赋予一个事件处理程序,以便在集合更改时调用” - 这是一种误解。您只需使用 ObservableCollection 代替其他一些 List 类型。具有绑定到此类集合的属性的 UI 元素将自动注册事件处理程序。您无需手动执行任何操作。
  • @Clemens,哦,我想我们需要为“CollectionChanged”事件提供一个处理程序。

标签: java c# wpf mvvm


【解决方案1】:

WPF“自动知道”何时更新目标属性的方式是源对象实现INotifyPropertyChanged 接口并为此属性引发PropertyChanged 事件。这就是绑定引擎的实现方式。

框架不订阅其他一些“可观察对象”(在这种情况下是什么意思)。

因此,如果您在视图模型中实现了 INotifyPropertyChanged 并引发了 PropertyChanged 事件,那么您并没有做错任何事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-09
    • 2019-01-30
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2017-07-12
    相关资源
    最近更新 更多