从理论上讲,关系是
查看 n - 1 视图模型 n - 1 模型
我知道,很多人会咬我打我,但是... 在实践中...
在业务应用程序中,通常会有数据访问层(DAL)。而通常来自DAL的实体就是您的模型(Model)。有时候,您可能需要使用其他类来包装这些实体以提供扩展功能或者添加一些额外的属性。也许您有自己的Models...
ViewModel和View(在实践中)通常具有1对1的关系。例如,每个屏幕(或屏幕的一部分)实际上都是一个配对的View和ViewModel。我认为通常只是像这样——View是UI层,而ViewModel是代码后备级别,View只是XAML文件——表示层。并且(最佳实践)所有其他内容都应该在ViewModel中,比如所有接收数据的过程,所有命令,所有可更改的字段等。这样通常可以测试ViewModel(通过单元测试)。一个ViewModel可以有多个Views(在实践中)通常只有当您对桌面应用程序(WPF),Web应用程序(Silverlight)和Windows Phone使用共享ViewModels时才会有多个Views。像这样。但通常——一个ViewModel——一个View。如果您有多个Views用于一个ViewModel——通常会有很多维护问题...
可以使用多个视图来呈现同一个视图模型,也可以使用多个不同的视图模型来呈现同一个视图。
多个视图对应一个视图模型:
例如,在主细节安排中,您可以将您的视图模型放入一个ObservableCollection中,并在其中呈现它们,然后将ListBox的项显示绑定到ViewModel的Title属性。ListBox呈现了您的视图模型的一个视图。然后,ListBox.SelectedItem绑定到另一个视图,用于呈现所选模型的详细信息。
一个视图对应多个视图模型:
从一组具有共同属性名称的视图模型开始,您可以在同一个视图中呈现所有视图模型。例如,您可以拥有一个简单的视图模型,由Title属性和ModelValue属性组成。在所有视图模型中,Title属性都将是字符串,但每个不同的视图模型可以为ModelValue属性具有不同的数据类型。StringViewModel将具有string ModelValue,而DoubleViewModel将具有double ModelValue。这些不同视图模型的呈现可以共享相同的视图,该视图包含TextBlock以呈现Title和TextBox以编辑ModelValue。这适用于在TextBox中可编辑的任何类型。
通过混合和匹配视图和视图模型,您可以从干净的视图和视图模型分离中获得巨大的优势。
查看 n - 1 ViewModel n - 1 模型
n
代表什么? - Clonkex