【问题标题】:MVVM WPF Best way to ensure ViewModel is up to date with Business Layer / Back EndMVVM WPF 确保 ViewModel 与业务层/后端保持同步的最佳方式
【发布时间】:2010-08-25 11:51:54
【问题描述】:

我正在尝试在我的 WPF 应用程序中使用 MVVM,该应用程序显示来自业务逻辑层中名为“Employee”的类中的数据,其属性为“Salary”。我有一个简单的 XAML 窗口,其中包含一个绑定到 ViewModel 类“EmployeeViewModel”中的 Salary 属性的文本框。 ViewModel 实现了 INotifyPropertyChanged,因此当 EmployeeViewModel 的 Salary 属性发生变化时,XAML 文本框中的值也会发生变化。一切正常。

现在,EmployeeViewModel 的 Salary 属性从 Employee 类的 Salary 属性中获取其值。但是,如果 Employee 类的 Salary 值被业务逻辑层中正在进行的某些其他过程更改,它不会在 EmployeeViewModel 中自动更新。让它做到这一点的最佳方法是什么?我在想 Employee 类中的某种 INotifyPropertyChanged 实现,它会让 EmployeeViewModel 知道自己更新。或者我应该使用依赖属性?或者,一旦业务逻辑层中的所有更改都已完成,我是否应该有“刷新” ViewModel 的程序。任何帮助表示赞赏!

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    我的想法

    如果您在业务实体上实现 INotifyPropertyChanged,您将在业务实体和视图模型之间创建耦合。

    您的模型不应依赖于 INotifypropertychanged 等特定功能。

    2- 如果您使用的是 Prism 框架,请使用 EventAgreegator,这是一种纯粹的解耦方式在模块之间进行通信。

    3- 当您说“一旦业务逻辑层中的所有更改都完成后,我的程序会‘刷新’ ViewModel”时,您的第三个选项点对我来说听起来不错。

    【讨论】:

    • 感谢您的帮助。经过一番思考,我决定选择第三种选择。我所有的 ViewModel 现在都属于一个名为 AllViewModels 的集合,该集合遍历每个 ViewModel 并在每个 ViewModel 中调用 Refresh 方法。 Refresh 方法遍历 ViewModel 中的每个属性,并使用 BusinessModel 中的相应属性进行更新,进而触发 OnPropertyChanged。
    【解决方案2】:

    我强烈建议您在您的业务对象(员工)上实现 INotifyPropertyChanged 并注册您的视图模型上的更改。

    如果您真的想尽可能多地保留 poco,您可以声明接口并添加一个名为 RaisePropertyChanged(string propertyName) 的公共方法,然后在您的业务逻辑完成时调用它。

    【讨论】:

    • 好的,所以 INotifyPropertyChanged 位似乎是前进的方向。因此,如果我在 Employee 中的 Salary 上放置一个 OnPropertyChanged,那么 EmployeeViewModel 中的 Salary 会在 Employee 中每次更改时自动更新自己?还是我需要一些额外的代码来让 EmployeeViewModel '听'?
    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2021-03-04
    • 1970-01-01
    相关资源
    最近更新 更多