2011-06-20 25 views
1

我没能找到关于这一主题的讨论,但我认为它很重要,那里有它的存在,所以生病是gladful读一个很大的机会。查看模型我们是否检查setters中的等式,还是只设置&always always?

在我们的属性viewmodel setter中,我们可以检查提供的值是否等于当前值,并且只在这种情况下通知,或者我们可以忽略该检查并立即设置通知&。

虽然此检查看起来令人愉快,因为它节省了一些资源,当VM上的“刷新”不会导致View重绘时,它也可能会带来一些不好的影响,当View稍微复杂一些,放入虚拟机或将其放入虚拟机中与将其保留在View中相比太困难了。

所以一般我与MVVM经验时,该检查按预期工作防止一些代码,我能想到的情景。所以目前我认为这个检查是一件危险的事情,有时候通常不值得使用挽救重绘。

此外,有时候这种检查可以用来替代更好的程序逻辑,例如在VM上有2个属性实际上是紧密连接的,比如字符串&某个实体的对象表示。所以当你设定例如字符串,它里面调用一个物体设定太多,如果正确验证,而这种平等检查从对象<的无限循环节约的情况 - >串制定者,但在这种情况下,我认为它要好得多引进一个标志这是在setter中检查的,如果不需要时不调用另一个,当调用对象设置器来自调用字符串设置器时。

我认为这个检查主要是用于我刚才所描述的,我认为情况是不完全执行检查一个很好的理由。

那么我们应该如何编写我们制定者?

编辑:只是为了给出一个场景,最简单也是最愚蠢的一个会是这样的:如果我们有一个OneWay绑定到View从VM,并且出于某种原因,View代码隐藏中存在一些处理器直接更改View,导致它变得与VM不同步,刷新虚拟机无法帮助。当然很明显,在这种情况下,我们应该调用VM绑定器,但我认为在某些情况下,解决方案变得不那么透明时,情况可能会更加复杂和先进。所以情景是愚蠢的,但有一个检查会阻止正确的行为。我会想更上了一个现实世界的例子在那里它不是那么容易解决,但可能会需要一些时间..

+0

您能描述检查引入问题的情况吗?这听起来似乎有可能是其他奇怪的事情,因为它是一个问题。 –

+0

我可以阅读这个作为“使用检查”的答案吗?:)让我想一下例子虽然.. –

+0

不一定,但我肯定会说,如果检查导致问题,这是一个引起关注的原因*为了这个问题。 –

回答

2

在我个人的经验中,我发现这个检查非常有用,我总是把相等检查放在setter中,以确保如果没有必要刷新绑定值,那么我不应该调用属性更改,也不应该强制视图在完全不需要时刷新该值。

谈到平等检查造成你麻烦的场景,我认为在场景中肯定有些奇怪,或者你很可能会错误地处理某些事情,否则我已经使用了很多MVVM,并且没有找到这样的场景在我的情况。即使存在不平等检查可能有意义的情况,我也不会停止使用平等检查,因为我在少数情况下会遇到一个小问题。我会尝试在特定问题情况下采取一些解决方法以避免问题,而不是在设置者中使用相等性检查

+0

我认为你毕竟是对的。我描述的所有奇怪场景似乎都来自OneWay绑定,因为TwoWay几乎不允许控制 - 它的绑定属性不同步。这只是意味着在与代码隐藏的单向绑定UI进行交互时需要注意 –

0

一般cheking是当值改变它阻止你做特别是当你射击的一些事件好主意一些不必要的甚至不想要的工作要完成。 我不明白为什么你想要在事件发生时触发事件。如果你愿意,那么最好是手动开火,然后做别人可能不期望的事情。

相关问题