/// <summary>
        /// 绑定锁定状态
        /// </summary>
        /// <param name="lockedItem"></param>
        void bindLockedState(UILockedItem lockedItem)
        {
            var firstClass = _classes.FirstOrDefault(c => c.Name.Equals(lockedItem.Class));

            if (firstClass == null)
            {
                return;
            }

            var lockedClass = _lockedRule.LockedTimeTable?.FirstOrDefault(lt => lt.ClassID.Equals(firstClass.ID));

            if (lockedClass == null)
            {
                return;
            }

            if (lockedClass.LockedCourseTimeTable == null)
            {
                return;
            }

            var has = lockedClass.LockedCourseTimeTable.Any(lt => lt.LockedTimes.Any(t => t.Day == lockedItem.DayPeriod.Day && t.Period == lockedItem.DayPeriod.Period));

            lockedItem.Locked = has;
        }
        void UnLockedTeacher(object obj)
        {
            UILockedItem lockedItem = obj as UILockedItem;

            var teachers = (from d in lockedItem.Details from t in d.Teachers select t);

            if (teachers.Count() == 0)
            {
                this.ShowDialog("提示信息", "没有可用教师!", CustomControl.Enums.DialogSettingType.OnlyOkButton, CustomControl.Enums.DialogType.Warning);
                return;
            }

            // 更新当前界面
            var filters = this._currentLockedItems.Where(i => i.Details.Any(d => d.Teachers.Any(dt => teachers.Contains(dt))));

            if (filters != null)
            {
                foreach (var f in filters)
                {
                    f.Locked = false;
                }
            }

            // 填充数据
            var results = (from c in _resultClasses
                           from rc in c.ResultDetails
                           select new
            {
                c.ClassID,
                rc
            }).Where(r => r.rc.Teachers.Any(t => teachers.Contains(t)));

            if (results != null)
            {
                foreach (var r in results)
                {
                    if (r.rc.Teachers.Count == 0)
                    {
                        continue;
                    }

                    var firstClass = _classes.FirstOrDefault(c => c.ID.Equals(r.ClassID));
                    if (firstClass != null)
                    {
                        UILockedItem item = new UILockedItem()
                        {
                            DayPeriod = r.rc.DayPeriod,
                            Class     = firstClass?.Name,
                            Details   = new List <ResultDetailModel>()
                            {
                                r.rc
                            }
                        };

                        this.UnLocked(item);
                    }
                }
            }
        }
        void UnLocked(object obj)
        {
            var cp = CommonDataManager.GetCPCase(base.LocalID);

            // 取消锁定
            UILockedItem lockedItem = obj as UILockedItem;

            // 获取规则信息方式。
            var firstClass = _classes.FirstOrDefault(c => c.Name.Equals(lockedItem.Class));

            if (firstClass == null)
            {
                this.ShowDialog("提示信息", "没有找到班级信息!数据错误!", CustomControl.Enums.DialogSettingType.OnlyOkButton, CustomControl.Enums.DialogType.Warning);
                return;
            }

            var lockedClass = _lockedRule.LockedTimeTable?.FirstOrDefault(l => l.ClassID.Equals(firstClass.ID));

            if (lockedClass != null)
            {
                lockedItem.Details.ForEach(c =>
                {
                    var courseModel      = _resultModel.Courses.FirstOrDefault(cc => cc.ID.Equals(c.CourseID));
                    var localCourseModel = cp.Courses.FirstOrDefault(cc => cc.Name.Equals(courseModel.Name));

                    // 检查科目
                    if (localCourseModel == null)
                    {
                        this.ShowDialog("提示信息", "没有找到该科目,确认基础数据是否改变!", CustomControl.Enums.DialogSettingType.OnlyOkButton, CustomControl.Enums.DialogType.Warning);
                        return;
                    }

                    var course = lockedClass.LockedCourseTimeTable?.FirstOrDefault(lc => lc.CourseID.Equals(c.CourseID));
                    if (course != null)
                    {
                        var has = course.LockedTimes.Any(lt => lt.Day == lockedItem.DayPeriod.Day && lt.Period == lockedItem.DayPeriod.Period);
                        if (has)
                        {
                            course.LockedTimes.RemoveAll(rt => rt.Day == lockedItem.DayPeriod.Day && rt.Period == lockedItem.DayPeriod.Period);

                            if (course.LockedTimes.Count == 0)
                            {
                                lockedClass.LockedCourseTimeTable.Remove(course);
                                if (lockedClass.LockedCourseTimeTable.Count == 0)
                                {
                                    _lockedRule.LockedTimeTable.Remove(lockedClass);
                                }
                            }
                        }
                    }
                });

                lockedItem.Locked = false;
            }
        }
        void LockedCourse(object obj)
        {
            UILockedItem lockedItem = obj as UILockedItem;

            lockedItem.Details.ForEach(d =>
            {
                var items = this._currentLockedItems.Where(si => si.Details.Any(dt => dt.CourseID.Equals(d.CourseID)));
                if (items != null)
                {
                    foreach (var i in items)
                    {
                        Locked(i);
                    }
                }
            });
        }
        void Locked(object obj)
        {
            var cp = CommonDataManager.GetCPCase(base.LocalID);

            // 锁定
            UILockedItem lockedItem = obj as UILockedItem;

            lockedItem.Locked = true;

            // 获取规则信息方式。
            var firstClass = _classes.FirstOrDefault(c => c.Name.Equals(lockedItem.Class));

            if (firstClass == null)
            {
                this.ShowDialog("提示信息", "没有找到班级信息!数据错误!", CustomControl.Enums.DialogSettingType.OnlyOkButton, CustomControl.Enums.DialogType.Warning);
                return;
            }

            var lockedClass = _lockedRule.LockedTimeTable?.FirstOrDefault(l => l.ClassID.Equals(firstClass.ID));

            if (lockedClass == null)
            {
                LockedClassTimeTable table = new LockedClassTimeTable();
                table.ClassID = firstClass.ID;
                table.LockedCourseTimeTable = new List <LockedClassCourseTimeTable>();

                lockedItem.Details.ForEach(d =>
                {
                    LockedClassCourseTimeTable courseTable = new LockedClassCourseTimeTable();
                    courseTable.CourseID    = d.CourseID;
                    courseTable.LockedTimes = new List <DayPeriodModel>()
                    {
                        d.DayPeriod
                    };
                    table.LockedCourseTimeTable.Add(courseTable);
                });

                if (_lockedRule.LockedTimeTable == null)
                {
                    _lockedRule.LockedTimeTable = new List <LockedClassTimeTable>();
                }

                _lockedRule.LockedTimeTable.Add(table);
            }
            else
            {
                var classInfo = cp.Classes.FirstOrDefault(cc => cc.Name.Equals(lockedItem.Class));

                if (classInfo == null)
                {
                    this.ShowDialog("提示信息", "没有找到班级,确认基础数据是否改变!", CustomControl.Enums.DialogSettingType.OnlyOkButton, CustomControl.Enums.DialogType.Warning);
                    return;
                }

                lockedItem.Details.ForEach(c =>
                {
                    var courseModel      = _resultModel.Courses.FirstOrDefault(cc => cc.ID.Equals(c.CourseID));
                    var localCourseModel = cp.Courses.FirstOrDefault(cc => cc.Name.Equals(courseModel.Name));

                    // 检查科目
                    if (localCourseModel == null)
                    {
                        this.ShowDialog("提示信息", "没有找到该科目,确认基础数据是否改变!", CustomControl.Enums.DialogSettingType.OnlyOkButton, CustomControl.Enums.DialogType.Warning);
                        return;
                    }

                    var course = lockedClass.LockedCourseTimeTable?.FirstOrDefault(lc => lc.CourseID.Equals(localCourseModel.ID));
                    if (course == null)
                    {
                        LockedClassCourseTimeTable courseTimeTable = new LockedClassCourseTimeTable()
                        {
                            CourseID    = localCourseModel.ID,
                            LockedTimes = new List <DayPeriodModel>()
                            {
                                new DayPeriodModel()
                                {
                                    Day        = lockedItem.DayPeriod.Day,
                                    Period     = lockedItem.DayPeriod.Period,
                                    PeriodName = lockedItem.DayPeriod.PeriodName
                                }
                            }
                        };
                        lockedClass.LockedCourseTimeTable.Add(courseTimeTable);
                    }
                    else
                    {
                        var has = course.LockedTimes.Any(lt => lt.Day == lockedItem.DayPeriod.Day && lt.Period == lockedItem.DayPeriod.Period);
                        if (!has)
                        {
                            course.LockedTimes.Add(new DayPeriodModel()
                            {
                                Day        = lockedItem.DayPeriod.Day,
                                Period     = lockedItem.DayPeriod.Period,
                                PeriodName = lockedItem.DayPeriod.PeriodName
                            });
                        }
                    }
                });
            }
        }
        StackPanel createStackPanel(string courseID, UILockedItem lockedItem)
        {
            var solidColorBrush = this.GetRandomColor(courseID);

            StackPanel sp = new StackPanel();

            sp.Background  = solidColorBrush;
            sp.Margin      = new Thickness(15);
            sp.DataContext = lockedItem;

            ContextMenu contextMenu = new ContextMenu();

            MenuItem lockMenuItem = new MenuItem()
            {
                Header           = "锁定",
                Command          = LockedCommand,
                CommandParameter = sp.DataContext
            };
            MenuItem unlockMenuItem = new MenuItem()
            {
                Header           = "取消锁定",
                Command          = UnLockedCommand,
                CommandParameter = sp.DataContext
            };

            MenuItem lockCourseMenuItem = new MenuItem()
            {
                Header           = "锁定科目",
                Command          = LockedCourseCommand,
                CommandParameter = sp.DataContext
            };
            MenuItem unlockCourseMenuItem = new MenuItem()
            {
                Header           = "取消锁定科目",
                Command          = UnLockedCourseCommand,
                CommandParameter = sp.DataContext
            };

            MenuItem lockTeacherMenuItem = new MenuItem()
            {
                Header           = "锁定教师",
                Command          = LockedTeacherCommand,
                CommandParameter = sp.DataContext
            };
            MenuItem unlockTeacherMenuItem = new MenuItem()
            {
                Header           = "取消锁定教师",
                Command          = UnLockedCourseCommand,
                CommandParameter = sp.DataContext
            };

            contextMenu.Items.Add(lockMenuItem);
            contextMenu.Items.Add(unlockMenuItem);
            contextMenu.Items.Add(new Separator());
            contextMenu.Items.Add(lockCourseMenuItem);
            contextMenu.Items.Add(unlockCourseMenuItem);
            contextMenu.Items.Add(new Separator());
            contextMenu.Items.Add(lockTeacherMenuItem);
            contextMenu.Items.Add(unlockTeacherMenuItem);

            sp.ContextMenu = contextMenu;
            return(sp);
        }