这是我的大型应用程序的简化版本,分为多个项目,对我来说似乎很合逻辑。我还尝试结合了MVVM的一些原理,尽管我想避免被诸如Prism,eventaggregators等重载代码的东西束之高阁。
应用程序的工作方式是,从列表中选择一只猫,然后文本框中的数字会自动添加到所选猫的年龄。而且,当更改文本框中的数字时,该数字也会添加到所选猫的年龄中:
以下是解决方案的组织方式:
CatsView和ComputeView用户控件已添加到MainView中,并设置为它们各自的视图模型。 CatsViewModel包含SelectedCat属性,并且当值更改时,它应在ComputeViewModel中运行Calculate方法。 ComputeViewModel包含文本框绑定到的YearsToAdd属性,并且当它更改时,也会调用Calculate方法。
问题区域以红色突出显示。第一个问题是CatsViewModel没有对ComputeViewModel的引用,因此无法从那里调用Calculate方法。另一个问题是ComputeViewModel不知道所选的猫是什么。
我想也许SelectedCat属性可能是全球性的,但对此一无所知。另一个解决方案是将MainViewModel传递到子视图模型中,但是除非我添加对Main项目的引用,否则该方法将不起作用,但这是不可能的,因为这会导致循环依赖。
该难题的解决方案是什么?