我目前正忙于将应用程序重写为MVVM(分阶段,因为这是很多工作)。
目前,我可以根据模型视图中的更改填充列表视图和控件,并且列表视图选择也正确耦合(至少我知道如何正确地完成)。
然而,我想知道模型中的变化将反映在模型视图中(因此在视图中)。我应该在模型中的所有项目上添加INotifyPropertyChange接口并订阅模型视图(如果我想订阅不在模型层次结构“顶部”的项目,甚至可能就像链一样)?
E.g。我有一个列表A包含列表B等。我是否需要在列表A中订阅列表B的属性更改,并在模型视图中订阅列表A?并取消订阅是否进行了另一个列表选择(导致大量取消订阅和新订阅项目)?
感谢您阅读/回答。
答案 0 :(得分:6)
是的,通常您会在模型上实施INotifyPropertyChanged
,并在您的视图模型中订阅。如果您正在为您的业务实体使用CSLA这样的框架,那么Rocky描述了一个贫穷与富有的模型,在后者中,您将模型直接暴露给视图模型上的视图作为属性。
我认为INotifyPropertyChanged
是一种稳定的依赖关系,因此它不会显着污染您的模型。有些人不喜欢直接将模型暴露给视图,但我发现它可以节省很多或重复代码。您可能会发现,如果不这样做,您的视图模型最终会复制模型上的许多属性,而不会添加任何值。
答案 1 :(得分:2)
如果我理解正确,您希望以编程方式更改模型中的数据并通过viewmodel显示更新的数据吗?
我建议您更改代码中的viewmodel属性,只使用模型加载/保存数据,这样可以消除这个问题。