CMDCanlendar-个人技术文档

概述

 

本文档主要简述CMDCalendar详情页面的构成以及增删查改功能的实现。

 

场景

 

    工作项序号:001 对待办日程/任务的增删查改

 

    背景:

 

  • 典型用户:

                        特别周[主要]

                        无声铃鹿[主要]

                        草上飞[主要]

  • 用户需求:a.特别周:今天的训练,七点前要完成!

                         b.特别周:今天,明天……干脆接下来的一个月都五点钟起来训练好了!

                         c.无声铃鹿:小特又在勉强自己了……这条日程,帮她修改掉吧。

                         d.草上飞:和铃鹿同学一起吃晚饭……那我呢?趁没人看见,偷偷删掉吧……

  • 假设条件:用户会使用本软件。

    场景:特别周打开本软件,使用添加任务功能添加了七点前完成训练的任务。

               特别周想了想,添加了从今天开始的持续一个月的五点起床训练的日程。

               无声铃鹿看见了特别周的日程,将日程内容修改为了六点起床,截止日期修改为了两星期之后。

               草上飞看见了特别周任务里“和铃鹿同学一起吃晚饭”的任务,偷偷删掉了它。

功能说明书

    目标:新建日程/任务

    角色:用户

    操作流程:           1.打开软件;

                                 2.点击新建,跳转到新建界面;

                                 3.输入标题,日期,详细信息等内容;

                                 4.点击“保存并退出”,保存内容并回到主界面;

                                 5.开始日期如晚于结束日期,会提醒用户出错;

                                 6.若编辑了内容但没有选择“保存并退出”而是选择了“返回”,会提醒用户没有保存。

    标题:修改日程/任务

    角色:用户

    操作流程:           1.打开软件;

                                 2.点击已有的日程/任务,跳转到详情界面;

                                 3.更改想要更改的内容;

                                 4.点击“保存并退出”,保存内容并回到主界面;

                                 5.开始日期如晚于结束日期,会提醒用户出错;

                                 6.若编辑了内容但没有选择“保存并退出”而是选择了“返回”,会提醒用户没有保存。

    标题:删除日程/任务

    角色:用户

    操作流程:           1.打开软件;

                                 2.点击已有的日程/任务,跳转到详情界面;

                                 3.点击删除,删除当前日程/任务并回到主界面。

技术说明书

    VIEW

1.日历视图

        左侧Gri(0,1)中放置一个calendarview,可用于选择日期,选中的日期会同步到右侧的所有日期选择框,包括日程的开始/结束时间以及任务的结束时间。另外,除了返回按钮之外的所有按钮都是装饰用的。

private void DateChoosing_SelectedDatesChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
        {
            try
            {
                TaskEndDate.Date = args.AddedDates[0];
                EventStartDate.Date = args.AddedDates[0];
                EventEndDate.Date = args.AddedDates[0];
            }
            catch(System.Runtime.InteropServices.COMException)
            { }
        }

2.功能栏

        包括保存并退出按钮和删除按钮。各绑定一个command和一个click事件,用来完成对应功能。

 

 

3.编辑区域

 

由Pivot,TextBox,CalendarPicker和TimePicker组成。两个PivotItem分别对应日程页和任务页。文本框内容与后台数据双向绑定。

由于数据库搭建时报道上出了差错,导致数据类型和页面中直接得到的类型有一些微小的差错,具体来说就是页面中直接得到的时间格式是DateTimeOffset和TimeOffset,而数据库数据为单纯的DateTime,无法直接绑定,于是在本页面中进行了一些转换后写入,就使用结果来说没有任何差别。

4.人员

由于多用户系统还未编写,本模块置空等待后续使用。

    MODEL

包括event和task两个model,分别对应日程和任务。二者结构大体相似,包括ID,标题,内容,时间等成员。具体留到之后由我们负责数据库部分的编译经理介绍。

    VIEWMODEL

namespace CMDCalendar.ViewModels
{
    public class EditPageViewModel:ViewModelBase
    {
        /// <summary>
        /// EditPage ViewModel。
        /// </summary>
        private IDatabaseUtils _databaseUtils;

        public RelayCommand _saveAndQuit;

        public RelayCommand _deleteCommand;

        public Event eventDisplay
        {
            get;
            set;
        }

        public DB.Task taskDisplay
        {
            get;
            set;
        }

        public RelayCommand SaveAndQuit =>
            _saveAndQuit ?? (_saveAndQuit =
            new RelayCommand(async () => 
            {
                var service = _databaseUtils;
                if (eventDisplay != null)
                    await service.UpdateEventAsync(eventDisplay);
                if (taskDisplay != null)
                    await service.UpdateTaskAsync(taskDisplay);
            }));

        public RelayCommand DeleteCommand =>
          _deleteCommand ?? (_deleteCommand =
              new RelayCommand(async () => 
              {
                  var service = _databaseUtils;
                  if(eventDisplay != null)
                      await service.DeleteEventAsync(eventDisplay);
                  else
                      await service.DeleteTaskAsync(taskDisplay);
              }));

        public EditPageViewModel(IDatabaseUtils databaseUtils)
        {
            _databaseUtils = databaseUtils;
            eventDisplay = new Event();
            taskDisplay = new DB.Task();
        }
        public EditPageViewModel():this(DesignMode.DesignModeEnabled?
                    (DatabaseUtils)null :
                    new DatabaseUtils())
        { }
        
    }
}

包括两个command,保存并退出和删除,以及两个数据结构,event和task,分别对应日程和任务。曾经尝试了很多次在数据的set和get里加入一些操作,或者在viewmodel里增加一些event,但最后都找到了更简单的解决办法,通过view内的交互就达到了想要的效果。结果就是显得viewmodel非常的简陋,但功能不受影响。

单元测试

还没做,前几天把能考虑到的的bug修完了,接下来的几天里会完成单元测试部分。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值