【问题标题】:WPF MVVM, where should I put view specific properties?WPF MVVM,我应该将视图特定属性放在哪里?
【发布时间】:2018-02-02 16:15:48
【问题描述】:

这件事一直在我脑海中浮现。假设我有一个用 WPF 制作的简单应用程序,画布内有一个矩形。我可以在 mousemove 上使用 Canvas.Left 和 Canvas.Top 移动这个矩形。但是假设我也想根据一些计算改变这个矩形的颜色并改变它的宽度和高度。我可以通过从我的视图模型绑定依赖属性来做到这一点。然而,随着我的项目进展,我的视图模型变得越来越大。我很想将它的一些逻辑封装在分离的对象中。所以我为我的 Rectangle 创建了一个类,包含背景、posX、posY、宽度和高度等属性。

问题是,所有这些属性都是特定于视图的。换句话说,这个对象不属于应用的商业逻辑(如果我理解这些概念,我还在学习)。所以问题是,我应该在哪里包含这个对象的类?在模型或 MVVM 的辅助层中。

感谢您的回答。

【问题讨论】:

  • 你应该有模型Rectangle 与 posX, posY, color。在 Vm 中,您可以通过绑定到视图来实现模型。如果您的视图模型变得太大,您可以重构更常见的元素,例如我们CalculatePositionOffset 可以在其他类中,如果它也可以计算其他事物的 pos 偏移量。有时虚拟机很大,就是这样。

标签: c# wpf mvvm


【解决方案1】:

视图模型公开了视图绑定的属性,例如您的背景、posX、posY、宽度和高度属性。这就是视图模型的用途。实际的业务逻辑与表现无关,属于模型。

因此,您的“视图特定”属性当然属于视图模型类。这些属性通常不是依赖属性,而是简单的 CLR 属性,但这是它自己的故事:

INotifyPropertyChanged vs. DependencyProperty in ViewModel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多