【问题标题】:Why do ViewModels need to implement INotifyPropertyChanged or use Dependency Properties?为什么 ViewModel 需要实现 INotifyPropertyChanged 或使用 Dependency Properties?
【发布时间】:2023-04-02 07:42:01
【问题描述】:

我已经看过很多关于 MVVM-Patern 的教程,但我仍然不明白如果我想将信息从 ViewModel 发送回 View,为什么我需要获取 Dependency-Property 或 INotiyfyPropertyChanged-Property .

【问题讨论】:

    标签: wpf mvvm viewmodel dependency-properties inotifypropertychanged


    【解决方案1】:

    依赖属性在属性更改时提供内置更改通知,这意味着 WPF 知道控件值何时更改。

    默认情况下,您的 ViewModel 类型不提供任何更改通知机制,因此如果它们不支持这些选项中的任何一个,视图应该如何知道您的 viewModel 中的属性何时发生更改?

    您需要您的 viewModel 使用这些选项中的任何一个,以便在属性值更改时可以通知视图。

    这意味着如果在代码中更改了属性值,则用户界面会更新,如果用户输入更改了属性,则您的 viewModel(最终是您的模型)也会更新以反映这些更改。 (基本上,绑定的双方都需要一种将属性更改相互通信的方式)。

    INotifyPropertyChanged 接口是首选方法,因为这意味着您的视图模型不是特定于 WPF 的,并且可以被其他用户界面技术使用。此外,依赖属性只能用于派生自 DependencyObject 的类型。

    【讨论】:

      【解决方案2】:

      首先:您根本不需要使用INotifyPropertyChanged 或DependencyObject。

      但是,这是使用 Binding 的中心点,其中有一些 Pub / Sub 机制 Binding,它正在监听那些PropertyChanged 事件并进行更新 如果 Binding 的相关属性已更改,则视图的视图。

      这里有更多信息:

      SO on how binding works

      Pub Sub aka Publish Subscribe Pattern

      【讨论】:

        【解决方案3】:

        INotiyfyPropertyChanged - 我们在视图模型中使用了这个属性,这样如果 UI 发生任何变化,这个属性就会反映这些变化。

        【讨论】:

          猜你喜欢
          • 2017-03-09
          • 2018-04-20
          • 1970-01-01
          • 1970-01-01
          • 2015-09-29
          • 1970-01-01
          • 2011-10-22
          • 1970-01-01
          • 2010-10-20
          相关资源
          最近更新 更多