SE_team

清华大学现代软件工程学生小组 指导老师:邹欣 组长:杜圆 组员:石礼昕,张远,郭华阳,高亦陶,贾志豪,李蔚

导航

iLifer框架的简单介绍(下)

Posted on 2011-04-15 11:12  SE_team  阅读(313)  评论(0)    收藏  举报

这部分主要讲讲UI的事情。UI的实现比较灵活,只要让用户比较轻松的完成Appointment,Task的添加,删除,修改,转化即可,我列举一些应有的功能供大家参考

  1. Appointment的添加,删除,修改,显示(alpha)
  2. Task的添加,删除,修改,显示(alpha)
  3. Task和Appointment的相互转化(beta)
  4. Summary(alpha)
  5. Tag的添加(alpha)
  6. Sync(alpha)
  7. 分享与被分享,订阅公共源(beta)

UI主要是和Logic部分进行交互,当UI检测到某些更改时,调用相应的函数,FocusLifer中是通过如下方法实现的

        public DateTime DueDate        
   {            
    get { return task.DueDate; }            
    set             
    {                
      if (! task.DueDate.Equals(value))                
      {                    
        TaskPanel.MyLogicControl.EditTask(task.ID, value, task.Priority, task.Title, task.Description); 
          this.OnPropertyChanged("DueDate");                
      }            
    }        
    }

Logic部分需要Update UI,例如Task部分的改动可能会使得Appointment panel的显示有所改变,这个主要通过Logic里面的event EventHandler<EventArgs> OnUIUpdate实现,一个例子如下

// In Logic

public void EditTask(...)
{...
  OnUIUpdate.Invoke(null, null); 
...} 

// In Initializer
logicControl.OnUIUpdate += appointmentPanel_OnUIUpdate_Handler; 

// In appointmentPanel_OnUIUpdate_Handler
this.Dispatcher.BeginInvoke(new ThreadStart( delegate(){ appointmentPanel_OnUIUpdate(); } )); 

// In appointmentPanel_OnUIUpdate
calendar.Paint();....//做具体的update的UI的一些事情

可能出现这样update的UI需要实现像Paint这样的重绘函数

个人感觉UI之间的交互这么绕了一圈有点麻烦,不过估计可能会少一下bug,当初唐神他们这么选择应该也是有理由的。。听听大家的意见吧。