9

在为我的应用程序的主视图添加额外功能时,我意识到代码量很快就会成为问题(目前我的视图模型中有大约 600 行代码,我还有很多要添加的内容)。

我一直在寻找有关如何将视图拆分/设计为更小的组件的文章,但我还没有找到令人满意的解决方案。一个人建议使用子视图模型,但这会带来其他问题(视图模型之间的依赖关系)。

我曾考虑过使用用户控件,但我在其他视图上使用的视图上没有任何内容,因此它有点违背用户控件的目的。

在这种情况下正确的方法是什么?

谢谢,阿德里安

4

4 回答 4

3

如果要将视图拆分为组件部分,则需要进行视图合成。如果你正在构建一个 MVVM 应用程序,那么你真的应该使用 MVVM 框架。像Caliburn.Micro这样的东西使视图合成变得非常容易。

视图模型之间不一定必须存在依赖关系,它们应该只知道生成视图所需的内容。这可能是父视图模型包含的业务对象的子集。由于父视图模型将引用所有子视图模型,因此它可以在构建时将业务对象的相关部分传递给它们。

于 2012-06-06T08:28:00.670 回答
2

我同意使用 Caliburn Micro。

但是,要扮演魔鬼的拥护者,您可以将 ViewModel 文件拆分为单独的文件(相同的类名)并在partial关键字之前使用class关键字。它通常更整洁,并且从分解为单独的类只需一步(非破坏前体)。

于 2013-11-17T22:33:28.327 回答
1

我也同意 Caliburn.Micro 是一个很好的解决方案,可以将您的应用程序拆分为更小的组件。

在 Caliburn.Micro 中,视图模型之间的通信基于事件聚合器模式。

这使得视图模型之间的松散耦合

于 2012-06-06T08:40:20.237 回答
0

分道扬镳并不理想。

看起来好像 Caliburn 工具包专注于事件,而我的应用程序主要依赖于 ICommand 实现。

对我来说,第一次接触 Caliburn.Micro 并不令人满意。该设置似乎是为 VS2010 量身定制的——这对我来说听起来很有希望——因为我确实有 VS2010 pro。但是我迷失了 Silverlight 的设置。与 Prism 等工具包相比,它缺乏启动的便利性。现在切换需要很长时间。我使用我自己的 MVVM 范式,它没有 Caliburn 抽象,它在任何地方都集成了多语言支持,而且由于 Binding/DataContext 范式的性质,它只面临一个可接受的问题,即某些源变得太大。对于这个问题,我接受“部分类”是一个解决方案——即使我知道有一个更优雅的解决方案可用。

在我工作的热度中,我无法更改为另一个工具包。

因此,我轻轻地等待 Microsoft 允许围绕该 Binding/DataContext 范例提供更大的灵活性。

可能是 Caliburn 在将视图模型分配给某个项目时表现出更多的智能。可以 ?(我认为确实如此。)

另一种选择可能是定义一个自定义(xaml 可用)对象,该对象触发一个自定义分配器,将哪个控件分配给哪个视图模型。那个怎么样 ?

于 2013-11-18T12:59:17.123 回答