如何在WPF应用程序中的项目之间传递属性?

这是我的大型应用程序的简化版本,分为多个项目,对我来说似乎很合逻辑。我还尝试结合了MVVM的一些原理,尽管我想避免被诸如Prism,eventaggregators等重载代码的东西束之高阁。

应用程序的工作方式是,从列表中选择一只猫,然后文本框中的数字会自动添加到所选猫的年龄。而且,当更改文本框中的数字时,该数字也会添加到所选猫的年龄中:

Application Layout

以下是解决方案的组织方式:

Code Organization

CatsView和ComputeView用户控件已添加到MainView中,并设置为它们各自的视图模型。 CatsViewModel包含SelectedCat属性,并且当值更改时,它应在ComputeViewModel中运行Calculate方法。 ComputeViewModel包含文本框绑定到的YearsToAdd属性,并且当它更改时,也会调用Calculate方法。

问题区域以红色突出显示。第一个问题是CatsViewModel没有对ComputeViewModel的引用,因此无法从那里调用Calculate方法。另一个问题是ComputeViewModel不知道所选的猫是什么。

我想也许SelectedCat属性可能是全球性的,但对此一无所知。另一个解决方案是将MainViewModel传递到子视图模型中,但是除非我添加对Main项目的引用,否则该方法将不起作用,但这是不可能的,因为这会导致循环依赖。

该难题的解决方案是什么?

comeonace 回答:如何在WPF应用程序中的项目之间传递属性?

对于一个大小合适的项目,我会将所有用户界面内容(这也意味着视图模型)放入 Main Project (然后将是WinForms / WPF / UWP应用程序)中。我将其称为用户界面。您的其他项目将是类库,根本没有GUI内容。

用户界面随后将需要引用您的两个类库(它将依赖于它们),但是其他项目将不知道用户界面(因此它们将不依赖于任何东西)。

在需要时,视图模型将能够从类库中调用方法,但是重要的是要声明(在类库中)所调用的方法与GUI绝对无关。

本文链接:https://www.f2er.com/3110058.html

大家都在问