我正在开发一个wpf应用程序。我使用mvvm模式。 我有几个用户控件,我希望它们有自己的视图模型,因为我想在不同的视图中重用这些用户控件,而不是一次又一次地在“超级” - 视图模型中实现相同的(特定于uc)逻辑。
所以我为每个视图都有不同的主视图模型,每个视图模型都创建了我的subviewmodel的一个实例,在subviewmodel的构造函数中传递了我的模型的某个属性。
只要此属性是引用类型(类,List<>,...),我在subviewmodel / usercontrol中所做的更改将直接发送给模型本身(因为它是引用类型)。 但是当subviewmodel用于基本类型时,如整数或枚举,这不会发生,因为该值只是值的副本,当我编辑此值时,我编辑副本而不是模型的值,课程。
我该如何解决这个问题?我该怎么做才能将更改后的值恢复到我的模型中?
我不想实现“viewmodel-communication-service”,因为对于我正在开发的小应用程序来说,这似乎太“太大了”。出于同样的原因,我也不想使用任何第三方组件。
在主视图模型中,我应该监听subviewmodel的propertychanged事件(并检查更改的属性是否是我的原始属性(检查其名称)并将新值写回模型)?嗯这应该工作,但我不喜欢在这样的场景中使用事件,因为它们异步到达。
或者是否可以以某种方式将原始类型作为ref值传递给subviewmodel(比如使用ref作为方法参数)?