看起来你有两个问题:
- 如何赫克没有这部分类的东西适合与MVVM?
- 如何构建所有视图模型和模型以及内容?
1)在讨论WPF时,你所说的“部分类”通常被称为“代码隐藏”。这是因为在非MVVM模式中,它通常具有所有位于xaml布局背后的实际C#代码 - 即“代码隐藏”。
你是正确的,一个好的MVVM实现一个很好的迹象是最小/无代码隐藏。正如你所提到的,通常它将把DataContext绑定到ViewModel上 - 在很多框架中,这些都是为你处理的,你甚至不需要这些。在我的MVVM项目各部分的类看起来是这样的:与MVVM的好处
namespace MyApp.Views
{
public partial class GeneratorView : CreatableView
{
public GeneratorView()
{
InitializeComponent();
}
}
}
部分原因是,所有你不得不在的WinForms意大利面条事件更新/连接代码全部由使用绑定绕过。但正如你所说,你仍然可以用WPF来做到这一点,但它通常被认为是不好的做法,绝对是MVVM。
与所有内容和命令直接通过数据绑定绑定到视图模型,部分类不必具有任何内容都没有。有很多的解释,但在基本的水平上:
- 该视图奠定了事情,并在屏幕上显示的东西。
- 视图模型包含UI特定的数据和逻辑。它处理来自视图的命令,并可能使用业务服务。
- 该模型表示您的数据。考虑一下数据库或文件系统中的内容。
2)MVVM是不是在你如何构建它严格。一般来说,约定是每个视图都有ViewModel。不过,我相信没有View的ViewModel可以。特别简单的。
但是当这个特殊的窗口调用许多模型时会发生什么,如客户端,产品等?你做了一个单一的ViewModel类,以某种方式做一切?
一点都没有,看起来好像你已经拥有了这个全有或全无的单片ViewModel。如果这些真的很简单的结构,我会做这样的:
但是,您可能需要一个专门的ClientView或ProductView中,而是将它们嵌入在主视图:
关键是您的ViewModels可能包含其他ViewModels,ViewModels数组。同样,您的视图可以嵌入其他视图来显示它的ViewModels - 或者不。如果他们很简单,或者你只是说,列出一些属性(也许当你点击'信息'按钮时,会出现一个对话框,它具有ViewModel的完整视图,但是在列表中只需要名称和成本
这很灵活,关于这个问题,通常Window甚至不是MVVM模式的一部分,它非常“愚蠢”,甚至没有ViewModel(另外,如果你想要)
拥有一个高级别的“AppViewModel”并且你所有的窗口都包含它(通常甚至不会打扰WindowViewModel,这实际上并不是一个问题) 。
来源
2016-08-18 10:11:41
Joe
UI逻辑进入代码隐藏,业务逻辑进入您的视图楷模。你的绑定和DataTemplates将处理你必须在winform中完成的大部分UI玩杂耍,但是如果你创建了自定义控件,你将会添加任何他们需要运行的代码到他们的代码隐藏中。 – Will