.net - 避免大量传播暴露给 ViewModel 的属性和事件

标签 .net wpf events architecture mvvm

我正在开发一个 MVVM 应用程序,我已经准备好开始构建用户界面(我的客户端代码主要是功能性的)

我现在遇到了一个问题,我正在尝试将应用程序数据获取到我需要的位置,以便 View 模型可以使用它,然后将其绑定(bind)到 View 。

不幸的是,我似乎要么有一些结构性的疏忽,要么我不得不面对这样的现实:我需要传播事件并引发过多的错误来通知 View 模型其属性已经改变了。

让我举例说明我的问题:

我有一个类“Unit”包含在类“Test”中,类“Session”包含在类“TestManager”中,该类包含在“TestDataModel”中,“TestDataModel”由数据绑定(bind)到的“TestViewModel”使用通过我的“TestView”......哇哦。

现在,考虑到 Unit(层次结构的底部)有一个名为“Results”的属性,该属性会定期更新,我想将其公开给我的 View 模型,然后将其数据绑定(bind)到我的 View ,问题是,我的唯一方法我真的可以认为这样做就是让事件在一条链条上永久存在,说“我已经更新了!”然后请求新值...这似乎是一个很棒的方法。或者,我可以注册一个静态事件并引发它,并让适当的“单元 View 模型”捕获该事件并请求更新。这看起来更好...但是...静态事件?这是一个禁忌的想法吗?

此外,还有这样的表达式:

TestDataModel.TestManager.Session.Test.Unit.Results[i] Seems REALLY gross to have on a View Model.  

我知道这一切都散发着糟糕的设计问题,但我不知道我做错了什么?我应该使用更多单例/容器控制的生命周期类型对象吗?使用静态辅助容器注册对象实例?也许是多吨?显然,在不熟悉现有结构的情况下,这些问题很难回答,但是如果您遇到了这样的情况,您做了什么重构?我应该接受这一点,添加群众事件并传播它们吗?

最佳答案

问题是您的 TestView 试图了解有关模型的所有信息。实际上,您希望拥有简单的 View 并使用组合将它们组合成更复杂的 View 。这样你就会有一个只处理单位的 View ,而不是其他任何东西(其他 View 将处理你的大模型的其他方面)这样你的 View 模型将通过一个定义良好的API访问模型(例如获取单位等) .)并且不需要通过暴露模型的所有内部结构以供任何人查看来破坏模型的封装。

关于.net - 避免大量传播暴露给 ViewModel 的属性和事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3039631/

相关文章:

c# - 如何从 WebRequest 中删除代理并保持 DefaultWebProxy 不变

wpf - 如何将 WPF 窗口大小设置为相对监视器屏幕的 25%

c# - MenuItem垂直对齐问题

c# - WPF按钮单击和命令不能一起工作MVVM

javascript - 如何通过javascript捕获浏览器的事件

javascript - 重叠项目的点击事件

Javascript:输入提交

python - 无法在 Python 中加载程序集 'Microsoft​.VisualStu​dio.TestTo​ols.UITest​ing'

.net - 强签名和更新引用程序集

.net - WPF 中的 Setter 优先级重写?