如何将更改从模型中获取到模型视图中

本文关键字:模型 获取 视图 | 更新日期: 2023-09-27 18:23:44

我目前正忙于将应用程序重写到MVVM中(分阶段,因为这是一项艰巨的工作)。

目前,我可以根据模型视图中的更改填充列表视图和控件,并且列表视图的选择也可以正确耦合(至少我知道如何正确执行)。

然而,我想知道模型中的变化会反映在模型视图中(从而反映在视图中)。我应该在模型中的所有项上添加INotifyPropertyChange接口并在模型视图上订阅吗(如果我想订阅不在模型层次结构"顶部"中的项,甚至可以像链一样订阅)?

例如,我有一个包含列表B的列表a等。我是否需要在列表a中订阅列表B的属性更改,并在模型视图中订阅列表a?如果选择了另一个列表(导致大量取消订阅和新订阅项目),则取消订阅?

感谢您的阅读/回答。

如何将更改从模型中获取到模型视图中

是的,通常您会在模型上实现INotifyPropertyChanged,并在视图模型中订阅。如果您正在为您的业务实体使用CSLA等框架,那么Rocky描述了一个贫弱与富裕的模型,稍后您将该模型作为属性直接暴露在视图模型的视图中。

我认为INotifyPropertyChanged是一个稳定的依赖项,所以它不会严重污染您的模型。有些人不喜欢将模型直接暴露在视图中,但我发现它节省了很多或重复代码。您可能会发现,如果不这样做,视图模型最终会复制模型上的许多属性,而不会增加任何值。

如果我理解正确,您想以编程方式更改模型中的数据,并相应地通过视图模型显示更新后的数据吗?

我建议您更改代码中的视图模型属性,只使用这些模型来加载/保存数据,这样可以消除这个问题。