我已经阅读了将模型数据中的更改传达给视图模型的各种方法。 有些人建议模型应尽可能实现INotifyPropertyChanged,以便它可以通知视图模型中已更改的属性。有些人建议在模型和视图模型之间建立一个服务层,服务层实现INPC,方法调用通过这个服务层路由到模型,以便服务层通知视图模型。WPF MVVM:INPC和调解视图模型和模型之间的通信
我认为后者是前者的更细粒度的修订,并已开始在我的模型类中实现INPC。这感觉不对,因为
a)我现在必须在我的视图模型中编写事件处理程序,以获取来自模型的通知。 这采用长开关(propertyName)的形式,它在视图模型上设置相应的属性,使NPC再次向上发送。我觉得我在这里写了很多的锅炉板代码。
b)视图模型现在通过一堆只依照惯例调整的字符串(即没有定义“接口”)耦合到我的模型。更不用说这会导致IDE的困难。
c)我的模型必须修改以适应这种情况!如果由于某种原因关闭了会怎样?我认为这样的模式是为了提高代码的可重用性而设计的。不仅如此,启动INPC事件所需的代码是单调乏味且重复的,并且不是真正可抽象的。
我真的很想知道WPF专业人员是如何通过依赖属性等来解决这个问题的。我感觉我错过了一些东西。我不喜欢使用框架,因为他们想从头开始学习。 我已经离开WPF一两年了,最近和AngularJS合作让我质疑我的方法。
谢谢!
当你说'模型'时,你指的是什么?您是指业务对象/数据类型类,与数据源连接的代码,还是两者? – Sheridan
我指的是业务数据和功能。 在这种情况下,我的模型类是使用VM“TestViewModel”“TestPlanViewModel”的“Test”(属性如“Description”,“Result”,方法如“Run”)和“TestPlan”。 –
您的模型不需要INPC,只需要您的视图模型。这就是你的虚拟机的全部内容 - 我看到有人把INPC放在他们的模型中,但它让我觉得它只是一个视图模型,而不是一个模型。 –