private void UpdateFilter()
        {
            _filter.DuplicateSelectMode  = _duplicateSelectMode;
            _filter.DuplicateJudgeMode   = _judgeMode;
            _filter.ifmaskDuplicateChips = ifmaskDuplicateChips;
            _filter.ifMaskOrEnableIds    = MaskOrEnableIds;
            _filter.ifMaskOrEnableCords  = MaskOrEnableCords;

            _filter.maskSites    = AllSites.Except(EnabledSites).ToList();
            _filter.maskHardBins = AllHBins.Except(EnabledHBins).ToList();
            _filter.maskSoftBins = AllSBins.Except(EnabledSBins).ToList();
            _filter.maskChips    = ParseMaskEnableIds();
            _filter.maskCords    = ParseMaskEnableCords();
            _dataAcquire.UpdateFilter(_filterId, _filter);

            CountPerPage     = DefaultPerPageCount;
            TotalCount       = _dataAcquire.GetFilteredChipSummary(_filterId).TotalCount;
            TotalPages       = TotalCount / CountPerPage + 1;
            CurrentPageIndex = 1;
            RaisePropertyChanged("TotalPages");
            RaisePropertyChanged("TotalCount");

            UpdateDataToStartPage();
        }
        public DataGridTabViewModel(IDataAcquire dataAcquire, int filterId, int tag)
        {
            _filterId = filterId;

            Tag = tag;

            _dataAcquire         = dataAcquire;
            _filter              = _dataAcquire.GetFilterSetup(_filterId);
            _duplicateSelectMode = DuplicateSelectMode.SelectFirst;
            _judgeMode           = DuplicateJudgeMode.ID;

            if (_dataAcquire.FileName.Length > 15)
            {
                TabTitle = _dataAcquire.FileName.Substring(0, 15) + "...";
            }
            else
            {
                TabTitle = _dataAcquire.FileName;
            }
            FilePath = _dataAcquire.FilePath;

            CountPerPage     = DefaultPerPageCount;
            TotalCount       = _dataAcquire.GetFilteredChipSummary(_filterId).TotalCount;
            TotalPages       = TotalCount / CountPerPage + 1;
            CurrentPageIndex = 1;
            UpdateDataToStartPage();


            AllSites             = new ObservableCollection <byte>(_dataAcquire.GetSites());
            AllHBins             = new ObservableCollection <ushort>(_dataAcquire.GetHardBins());
            AllSBins             = new ObservableCollection <ushort>(_dataAcquire.GetSoftBins());
            EnabledSites         = new ObservableCollection <byte>(AllSites.Except(_filter.maskSites));
            EnabledHBins         = new ObservableCollection <ushort>(AllHBins.Except(_filter.maskHardBins));
            EnabledSBins         = new ObservableCollection <ushort>(AllSBins.Except(_filter.maskSoftBins));
            ifmaskDuplicateChips = _filter.ifmaskDuplicateChips;
            DuplicateMode        = new List <string>();
            DuplicateMode.Add(DuplicateSelectMode.SelectFirst.ToString());
            DuplicateMode.Add(DuplicateSelectMode.SelectLast.ToString());
            DuplicateMode.Add(DuplicateSelectMode.AllDuplicate.ToString());
            JudgeMode = new List <string>();
            JudgeMode.Add(DuplicateJudgeMode.ID.ToString());
            JudgeMode.Add(DuplicateJudgeMode.Cord.ToString());
            MaskEnableCords = "";
            MaskEnableChips = "";

            JumpStartPage = new DelegateCommand(() => { UpdateDataToStartPage(); });
            JumpLastPage  = new DelegateCommand(() => { UpdateDataToLastPage(); });
            JumpNextPage  = new DelegateCommand(() => { UpdateDataToNextPage(); });
            JumpEndPage   = new DelegateCommand(() => { UpdateDataToEndPage(); });
            ClearIDs      = new DelegateCommand(() => { MaskEnableChips = ""; RaisePropertyChanged("MaskEnableChips"); });
            ClearCords    = new DelegateCommand(() => { MaskEnableCords = ""; RaisePropertyChanged("MaskEnableCords"); });
            ExportToExcel = new DelegateCommand(() => { ExportToExcelAction(); });

            RemoveSite = new DelegateCommand <MouseButtonEventArgs>((e) => {
                var v = ((ListBox)(e.Source));
                if (v.Items.Count > 1 && v.SelectedIndex >= 0)
                {
                    EnabledSites.RemoveAt(v.SelectedIndex);
                }
            });
            AddSite = new DelegateCommand <MouseButtonEventArgs>((e) => {
                var v = ((ListBox)(e.Source));
                if (v.SelectedIndex >= 0 && !EnabledSites.Contains((byte)v.SelectedItem))
                {
                    EnabledSites.Add((byte)v.SelectedItem);
                }
            });
            RemoveHBin = new DelegateCommand <MouseButtonEventArgs>((e) => {
                var v = ((ListBox)(e.Source));
                if (v.Items.Count > 1 && v.SelectedIndex >= 0)
                {
                    EnabledHBins.RemoveAt(v.SelectedIndex);
                }
            });
            AddHBin = new DelegateCommand <MouseButtonEventArgs>((e) => {
                var v = ((ListBox)(e.Source));
                if (v.SelectedIndex >= 0 && !EnabledHBins.Contains((ushort)v.SelectedItem))
                {
                    EnabledHBins.Add((ushort)v.SelectedItem);
                }
            });
            RemoveSBin = new DelegateCommand <MouseButtonEventArgs>((e) => {
                var v = ((ListBox)(e.Source));
                if (v.Items.Count > 1 && v.SelectedIndex >= 0)
                {
                    EnabledSBins.RemoveAt(v.SelectedIndex);
                }
            });
            AddSBin = new DelegateCommand <MouseButtonEventArgs>((e) => {
                var v = ((ListBox)(e.Source));
                if (v.SelectedIndex >= 0 && !EnabledSBins.Contains((ushort)v.SelectedItem))
                {
                    EnabledSBins.Add((ushort)v.SelectedItem);
                }
            });

            DuplicateSelectModeChanged = new DelegateCommand <SelectionChangedEventArgs>((e) => {
                var v = ((ComboBox)e.Source).SelectedItem;
                _duplicateSelectMode = (DuplicateSelectMode)Enum.Parse(typeof(DuplicateSelectMode), v.ToString());
            });
            JudgeModeChanged = new DelegateCommand <SelectionChangedEventArgs>((e) => {
                var v      = ((ComboBox)e.Source).SelectedItem;
                _judgeMode = (DuplicateJudgeMode)Enum.Parse(typeof(DuplicateJudgeMode), v.ToString());
            });

            ApplyFilter = new DelegateCommand(() => { UpdateFilter(); });

            CreateHistogram = new DelegateCommand <RoutedEventArgs>((e) => {
                ;
            });
        }