我正在使用MVVM灯并且我有一个View Model但是我不确定是否应该移动一些属性,因为我现在有很多属性。
尽管它们大部分都是简单的属性,但我的视图模型有点长(437行特色)
我想知道将某些属性移出到模型中是否有意义,从某种意义上说,更容易找到更重要的属性。
我的wp7视图中有5个控件。
IsEnabled的5个属性(如果关闭位置服务,则禁用所有属性)l
用于存储用户选择的值的6个属性
3个继电器命令。
根据所选内容隐藏/显示控件的1个属性。
我仍然在页面上工作,所以最终可能会有更多。
我想知道是否应该取出存储来自用户的信息并将其作为模型的6个属性。
然后在ViewModel中只有像relayCommands,Visablity,Enabled这样的东西,并且有一个当然属于我的Model类的属性。
答案 0 :(得分:0)
拥有精益视图模型总是一件好事。它使以后更容易管理和理解其他开发人员(或您自己)。
将特定于域的数据提取到模型中总是一件好事。假设您希望稍后在不同的视图中引用该用户 - 将所有内容都堆积到您的视图模型中,您每次创建新的视图模型时都必须复制大量代码。不好。
如果您将所述用户拉入其自己的域模型对象,那么您只需使用一行代码引用该用户(并通过setter和getters轻松访问其属性。
请记住,MVVM代表模型,视图,视图模型,没有模型,您可能会陷入可能几乎混乱的代码和大量复制。复制代码会导致复制时的人为错误以及其他许多麻烦。
现在这是一般的想法。我理解你是在询问你应该如何管理你的"临时"属性(用户填写),我必须说同样的规则适用于上面。拥有多个模型根本不是一件坏事(如果在企业环境中工作教会了我什么,那就不用担心将代码分成可管理的大小了。)
您可以使用的另一种方法是为视图模型创建父类以继承。把任何"我需要这些用于我的所有观点"此处的属性,特定信息保留在继承超类的视图模型中。
我注意到的第三件事是你有一个" isEnabled"每个控件的属性。如果你有一个"全部或全部"场景,就像你描绘的那样,你只需要一个。将该属性绑定到所有元素的可见性,并简化您的可见性管理六倍=)
希望这清除了一些东西! =)
答案 1 :(得分:0)
视图的任何内容都应该在viewModel中。理想情况下,您不希望仅因为您的视图需要更新模型。任何此类事情都会进入ViewModel。 如上所述,您可以分解视图模型。不需要对视图模型进行一对一的视图映射。视图可以由许多视图模型组成。
437行属性你的意思是说你有437个属性吗?如果这种情况对您自己的观点来说太过分了,我会重新考虑将您的观点分解为更简单的可用性。
Here是我们在使用MVVM时遇到的一些常见场景