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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在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项目的引用,否则该方法将不起作用,但这是不可能的,因为这会导致循环依赖性。

这个难题的解决方案是什么?

答案

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

<< [User Interface将需要引用您的两个类库(它将依赖于它们),但是其他项目将不知道用户界面(因此它们将不依赖任何内容)。

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

以上是关于如何在WPF应用程序的项目之间传递属性?的主要内容,如果未能解决你的问题,请参考以下文章

将字符串或属性传递给 WPF Code Behind

在1个基本类和2个WPF窗口之间传递数据

如何在解决方案中的项目之间共享单个配置?

如何在组件之间传递状态属性

如何使用 NSManagedObject 对象在视图控制器之间传递自定义属性?

Caliburn.Micro-如何从继承的ViewModel在WPF视图中显示多个项目:Conductor 。Collection.AllActive