1
2
这里的基本问题是使用prism组合子视图,使小部件子视图的粒度太细。 小部件是子视图(用户控件)的集合,它们共同组成一个视图,例如,组合“文件选择器”和“网格列表”。子视图应该使用直接的XAML组成合成视图。您仍然可以获得各个用户控件的可重用性,但是小部件的组成在设计时是固定的。 现在我们有了一个视图:widgetview(由用户控件组成),我们可以将该视图绑定到一个视图模型:widgetviewmodel。通过组成多个视图模型来处理小窗口视图的设置。只需在WITGETVIEWVIEW模型上放置一个属性,它就可以显示一个WIDGETStutsVIEW模型。用户控件绑定widgetviewmodel以与基础模型交互,但绑定到widgetsettingviewmodel以进行控件设置。 通过这种方式,我们可以将主视图模型和设置视图模型绑定到小部件。 |
2
1
我发现直接绑定到应用程序设置最容易,如下所示:
假设使用VisualStudio的“.St设置”文件所公开的Soal.St配置的应用程序设置功能。如果您使用其他机制来保存设置,此技术仍然有效:仅将用户和应用程序设置暴露在静态对象上并绑定到它。 如果您有一个具有大量应用程序设置的选项对话框,则可以使用设置对象作为数据上下文来简化操作:
请注意,如果您这样做,您可以在应用程序退出时免费保存设置,任何设置更改都会立即反映在您的用户界面中。 我还发现将设置绑定到对象的非UI属性也很有用,这样当应用程序设置更改时,对象将接收PropertyChangedCallback事件,使其更新变得简单,并避免将我的代码与大量不必要的事件注册混淆。 |
3
0
啊,你的编辑澄清了足够多的事情来保证一个新的答案。这里是: 视图模型之所以称为“视图模型”,是因为它实际上是 模型 . 是的,它通常不会被保存到磁盘上(尽管它可以),但它具有模型的所有其他方面:它存储用户数据、从视图绑定、没有对视图的引用等。
在您的案例中,您有一组要与每个用户、小部件组合关联的设置。此设置集合需要持久化,并且在每个视图中都可用。从概念上讲,这是一个单独的模型对象:它不是一个小部件,它不是一个用户,也不是特定于视图的。无论您称之为“视图模型”还是简单地称之为“模型”,这主要是一个术语问题。不管您想对它进行分类,让我们调用对象本身
在某个地方,您将有一个后备存储,您将把userwidgetsettings对象持久保存到该存储中。这可能在本地文件、注册表或存储用户和小部件对象的同一数据库中。为了便于讨论,假设您将它们与用户和窗口小部件对象分开存储,并有一个类来保存它们:
现在,视图使用的视图模型只需要一个属性来访问设置:
在您的视图中,您可以使用以下设置:
您的复选框控制它,如下所示:
旁注:我发现平均只有20%的视图需要自己的视图模型。其余的可以使用模型本身公开的公共属性。如果您发现自己为每个单独的视图创建了一个单独的视图模型,那么可能会出现问题。您可能想看一看,看看您在视图模型中所做的一些事情是否与在模型本身中所做的事情一样或更合理。底线:设计良好的模型对象可以显著减少WPF应用程序中的代码量。 |
Xsayar · 如何将两个命令绑定到WPF按钮? 6 年前 |
Mark Denom · 我的数据绑定是如何写出长度属性的? 6 年前 |
Dev · 如何更新绑定到UI的集合? 6 年前 |
Detlef D Soost · 多重绑定未设置值 6 年前 |
Jack Guo · 在MVVM中清除集合视图的正确方法 6 年前 |