Tim*_*oyd 5 .net wpf prism mvvm
我有一个使用WPF\Prism\MVVM开发的应用程序.一切顺利,我有一些令人愉快的MVVM实现.但是,在我的一些视图中,我希望能够绑定应用程序设置,例如,当用户重新加载应用程序时,应该在用户上次使用该应用程序时检查自动滚动网格的复选框.
我的视图需要绑定到保持"自动滚动"设置状态的东西.我可以把它放在视图模型上,但是应用程序设置与视图模型的目的是正交的."自动滚动"设置控制视图的一个方面.此设置只是一个示例.将有相当多的它们和我的视图模型一起使用属性来表示应用程序设置(所以我可以绑定它们)感觉非常令人讨厌.
每个视图的一个视图模型似乎是de rigeuer ...
什么是最好\通常的做法在这里?
为了添加更多上下文,我正在开发一个带有动态选项卡式界面的UI.每个选项卡将托管一个小部件,并且有各种小部件.每个小部件都是各个视图的Prism组合.某些视图在窗口小部件中很常见,例如文件选择器视图.虽然每个窗口小部件由多个视图组成,但概念上,窗口小部件具有一组用户设置,例如,选择了最后一个文件,启用了自动滚动等.当应用程序再次启动时,需要持久保存和检索这些窗口小部件,以及窗口小部件视图重新创建.
我的问题集中在这样一个事实,即概念上一个小部件有一组用户设置,它与一个小部件由许多视图组成的事实直接相关.小部件中的每个视图都有自己的视图模型(它可以很好地和逻辑地工作)但是如果我坚持每个视图的一个视图模型,我将不得不使用用户设置支持的属性来展开每个视图模型(所以我可以数据绑定).
如果我必须使用用户设置属性来展开每个视图模型,则每个视图的单个视图模型听起来不正确.
这里的基本问题是使用 Prism 组合子视图来制作小部件 - 子视图太细粒度。
小部件是子视图(用户控件)的集合,它们一起工作以形成单个视图,例如组合“文件选择器”和“网格列表”。应使用简单的 Xaml 来组合子视图以形成复合视图。您仍然可以获得各个用户控件的可重用性,但小部件的组成在设计时是固定的。
现在我们有了一个视图:WidgetView(由用户控件组成),我们可以将该视图绑定到单个视图模型:WidgetViewModel。然后通过组合多个视图模型来处理小部件视图的设置。只需在 WidgetViewModel 上放置一个公开 WidgetSettingsViewModel 的属性即可。用户控件绑定 WidgetViewModel 以与底层模型交互,但绑定到 WidgetSettingsViewModel 以进行小部件设置。
通过这种方式,我们可以将主视图模型和设置视图模型绑定到小部件。