2

我正在使用 MVVM light 并且我有一个视图模型,但我不确定是否应该将一些属性移出,因为我现在有很多属性。

尽管它们大部分都是简单的属性,但我的视图模型有点长(437 行属性)

我想知道将一些属性移出模型是否有意义,从某种意义上说,可以更容易地找到更重要的属性。

我的 wp7 视图上有 5 个控件。

IsEnabled 的 5 个属性(如果位置服务关闭,则所有属性都被禁用)l

6个属性来存储用户选择的值

3 个中继命令。

1 个属性可根据所选内容隐藏/显示控件。

我仍在处理该页面,因此最终可能会有更多内容。

我想知道是否应该取出存储用户信息的 6 个属性并将其制成模型。

然后在 ViewModel 中添加诸如 relayCommands、Visblity、Enabled 之类的东西,并拥有一个属性,当然还有我的 Model 类。

4

2 回答 2

0

视图的任何内容都应该在您的视图模型中。理想情况下,您不希望仅仅因为您的视图也需要更新您的模型。任何这样的事情都会进入 ViewModel。如上所述,您可以分解视图模型。视图到视图模型不需要一对一的映射。一个视图可以由许多视图模型组成。

437行属性是指您有 437 个属性吗?如果这种情况对您的观点本身来说太过分了,我会重新考虑将您的观点分解成更简单的观点以提高可用性。

以下是我们在使用 MVVM 时通常会遇到的几个常见场景

于 2013-08-02T11:12:41.120 回答
0

拥有精益视图模型总是一件好事。它使以后的其他开发人员(或您自己)更容易管理和理解。

将特定领域的数据提取到模型中总是一件好事。假设您想稍后在不同的视图中引用该用户 - 将所有内容都堆积到您的视图模型中,每次创建新的视图模型时都必须复制大量代码。不好。

如果您将所述用户拉入它自己的域模型对象中,那么您可以简单地使用一行代码引用该用户(并通过 setter 和 getter 轻松访问其属性。

请记住,MVVM 代表模型、视图、视图模型,如果没有模型,您可能会陷入几乎混乱的代码和大量的复制中。复制代码会在复制时导致人为错误以及其他许多令人头疼的问题。


现在这是一般的想法。我知道您在询问您应该如何管理您的“临时”属性(用户填写),我不得不说与上面相同的规则适用于此。拥有多个模型根本不是一件坏事(如果在企业环境中工作教会了我什么,那么它并不害怕将代码拆分为可管理的大小)。

您可以使用的另一种方法是为您的视图模型创建一个父类以继承。将任何“我的所有视图都需要这些”属性放在这里,具体信息将留在继承超类的视图模型中。

我注意到的第三件事是您的每个控件都有一个“isEnabled”属性。如果你有一个“全有或全无”的场景,就像你描绘的那样,你只需要一个。将该属性绑定到所有元素的可见性,并简化您的可见性管理六倍 =)

希望这能解决一些问题!=)

于 2013-08-01T22:42:18.460 回答