这部分主要讲讲UI的事情。UI的实现比较灵活,只要让用户比较轻松的完成Appointment,Task的添加,删除,修改,转化即可,我列举一些应有的功能供大家参考
- Appointment的添加,删除,修改,显示(alpha)
- Task的添加,删除,修改,显示(alpha)
- Task和Appointment的相互转化(beta)
- Summary(alpha)
- Tag的添加(alpha)
- Sync(alpha)
- 分享与被分享,订阅公共源(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,当初唐神他们这么选择应该也是有理由的。。听听大家的意见吧。
浙公网安备 33010602011771号