2012-02-23 70 views

回答

19

从理论上讲,关系

视点N - 1视图模型N - 1型

我知道,很多人会咬和打我,但...在实践中......

很多时候,在商业应用程序中,有数据访问层(DAL)。很多时候,来自DAL的实体是您的模型。有时候你应该用额外的类来包装这些实体,以提供扩展功能或者一些额外的属性。也许你有自己的模型...

ViewModels和Views(在实践中)通常有1对1的关系。类似于 - 每个屏幕(或屏幕的一部分)实际上都是配对的View和ViewModel。我认为通常就像 - View是UI层,而ViewModel是代码隐藏层。查看只是XAML文件 - 表示层。并且(最佳实践)其他的一切都应该在ViewModel中 - 所有的数据接收过程,所有的命令,所有的可变字段等等。这种方式通常可以测试ViewModel(使用单元测试)。一个ViewModel可以有多个视图(在实践中),通常只有在共享ViewModel时才能使用,例如DesktopApplication(WPF),Web Application(Silverlight)和Windows Phone。像这样的东西。但通常 - 一个ViewModel - 一个View。如果您对一个ViewModel有多个视图 - 通常您会遇到很多维护问题...

4

对于每个视图,每个视图模型和一个视图模型都有一个模型,而在另一个方向上,一切都是n。

6

视点N - 1视图模型N - 1型

4

对同一个视图模型可以使用多个视图,也可以使用多个视图模型为相同的看法。

许多-查看到一个视图模型:

例如,在主详细的安排,你可以把你的视图模型到一个ObservableCollection并且在您绑定的项目列表框呈现它们显示给Title属性的ViewModel。 ListBox呈现视图模型的一个视图。然后,ListBox.SelectedItem被绑定到不同的视图,该视图呈现所选模型的细节。

一观众的ViewModels:

了一组视图模型中都承担着相同的属性名称,你可以展示所有的视图模型在同一视图开始。例如,您可以有一个由Title属性和ModelValue属性组成的简单视图模型。在所有视图模型中,Title属性都是字符串,但是每个不同的视图模型对于ModelValue属性可以具有不同的数据类型。 StringViewModel将有一个字符串ModelValue,DoubleViewModel将有一个双重ModelValue。不同视图模型的呈现可以共享相同的视图,该视图由用于呈现标题的TextBlock和用于编辑ModelValue的文本框组成。这将适用于TextBox中可编辑的任何类型。

通过混合并匹配Views和ViewModels,您可以从View和ViewModels的清晰分离中获得巨大的优势。