日期:2014-05-20  浏览次数:20743 次

小问MVC模式
如果V层数据改变了,通过C层来修改M层的数据,然后由M层的数据改变通知对应的所有V层重绘。
小弟有个疑问,当重绘时V层改变,岂不是有通知C层工作。这样不是死循环下去啦?

------解决方案--------------------
没弄过,不懂。帮你顶
------解决方案--------------------
要区分重绘和人为的修改
m改变后c重绘所有画面,重绘并不会引起m的改变,所以不会引起再次重绘,没有死循环
如果有死循环,那是设计出问题了
------解决方案--------------------
V层只负责显示,不负责修改,其实你修改数据是提交给C,然后反馈给M,最后由M来更新V这才是对的。
即使你显示上可以有一个即输即见,但也应该像输入法一样,有个提交的动作。
------解决方案--------------------
汗颜...
------解决方案--------------------

就像2楼说的要区分重绘和人为的修改

你可以定义一个全局变量.
然后供给C层去控制.
当V层重绘时触发C层的一个事件是么?
定义一个BOOL变量.
在事件中先判断这个BOOL变量
C# code

bool canRefush=true; //全局变量,控制事件触发
public void xxx_refush(...)
{
 canRefush=false;
 if(!canRefush)
 {
  ...M层操作...
  V层重绘(); //V层重绘,再次调用该事件.但是canRefush为false; 事件被取消.
  canRefush=true;
 }
}

------解决方案--------------------
精华贴,先留个名
------解决方案--------------------
要区分重绘和人为的修改 !!!Up