实际上,在这个主题中,我想知道人们尝试将所有 WPF 问题排除在 WPF 中的 ViewModel 之外的经验。
干杯
AWC
实际上,在这个主题中,我想知道人们尝试将所有 WPF 问题排除在 WPF 中的 ViewModel 之外的经验。
干杯
AWC
我的个人指导方针:是的,如果它很容易做到的话。我真的很喜欢View - ViewModel 方法的关注点分离,但是因为我很确定我永远不会在没有 WPF 的情况下使用我的 ViewModel,所以我不会为了避免 WPF 引用而使我的代码更复杂或更不可读.
AWC,
根据我的经验,最好的做法是不要将所有 WPF 问题排除在 ViewModel 之外。我不是在谈论 View 特定的类(列表框、文本块等),但我们应该始终牢记管理对 UI 线程的访问是 WPF 的重要组成部分,我应该在 ViewModel 中对其进行维护。这是因为 View 只负责提供一个清晰的模板来呈现 VM 提供的数据。是 ViewModel 决定是否应该异步检索数据以及在什么情况下应该绑定数据 - 上面暗示使用 Dispatcher 来管理对 UI 线程的访问。所以我的回答是:不要忘记 WPF 不仅仅是一个 View 类。
我相信您想问开发人员是否应该担心 VM 类中的 View。如果我是对的,答案是肯定的,他们不应该担心。ViewModel 只是一个向匿名演示者(视图)提供完整数据/命令集的层 - 它既不关心绑定视图将使用所提供数据的哪一部分,也不关心该数据将如何呈现。
我希望我的回答有帮助。如果您还有其他问题,请随时询问。
我认为这几乎总是可能的,只要您不介意编写更多代码。:)
想想你可以在 ViewModel 端以某种方式表示的东西:
我不知道,也许我只是一个纯粹主义者,但如果我在我的视图模型顶部看到任何“使用 System.Windows”或“使用 System.Windows.Controls”,我知道我已经轻松了摆脱可能会回来咬我屁股的东西。
我不同意 - ViewModel 的重点不是处理 View 和 Model 之间的阻抗不匹配吗?我认为您不需要让 ViewModel 100% WPF-free-VM 可以帮助您。
我一直发现 ViewModel 为我做的最有用的事情之一就是将对象访问编组到 Dispatcher 线程,以保存所有那些关于“只能从 UI 线程访问该对象”的尴尬错误。我会说这与 WPF 不可知论相冲突,因此你应该努力做到不可知论并不是一个普遍的规则。当然,让您的 ViewModel 持有例如的集合并不是一个好主意。ListBoxItems 或类似的东西。分离很好,但你必须对技术的需求做出一些让步。