Newer
Older
Correlator / PipeGallery / ViewModel / AudioListViewModel.cs
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using PipeGallery.Model;

namespace PipeGallery.ViewModel
{
    public class AudioListViewModel : ModelBase
    {
        private List<FileInfo> _fileInfos = null;

        public List<FileInfo> FileInfos
        {
            get
            {
                if (_fileInfos == null)
                {
                    _fileInfos = new List<FileInfo>();
                }

                return _fileInfos;
            }
            set { _fileInfos = value; }
        }

        private ObservableCollection<FileInfo> _showFileInfos = null;

        public ObservableCollection<FileInfo> ShowFileInfos
        {
            get
            {
                if (_showFileInfos == null)
                {
                    _showFileInfos = new ObservableCollection<FileInfo>();
                }

                return _showFileInfos;
            }
            set { _showFileInfos = value; }
        }

        /// <summary>
        /// 当前页
        /// </summary>
        int _currentPage = 1;

        public int CurrentPage
        {
            get { return _currentPage; }
            set
            {
                if (_currentPage != value)
                {
                    _currentPage = value;
                    RaisePropertyChanged("CurrentPage");
                }
            }
        }

        /// <summary>
        /// 总页数
        /// </summary>
        int _totalPages = 0;

        public int TotalPages
        {
            get { return _totalPages; }
            set
            {
                if (_totalPages != value)
                {
                    _totalPages = value;
                    RaisePropertyChanged("TotalPages");
                }
            }
        }

        /// <summary>
        /// 展示页数列表
        /// </summary>
        private ObservableCollection<string> _showPages = null;

        public ObservableCollection<string> ShowPages
        {
            get
            {
                if (_showPages == null)
                {
                    _showPages = new ObservableCollection<string>();
                }

                return _showPages;
            }
            set { _showPages = value; }
        }


        private Boolean? _isChecked = false;

        public Boolean? IsChecked
        {
            get { return this._isChecked; }
            set
            {
                if (this._isChecked != value)
                {
                    this._isChecked = value;
                    RaisePropertyChanged("IsChecked");

                    if (this._isChecked == true)
                    {
                        AllSelectedOrClear(true);
                    }
                    else if (this._isChecked == false) // 如果节点未选中
                    {
                        AllSelectedOrClear(false);
                    }
                    else
                    {
                    }
                }
            }
        }

        public void RefreshShowFileInfos(bool isEndPage = false)
        {
            ShowFileInfos.Clear();
            if (_fileInfos.Count % 10 == 0)
            {
                TotalPages = _fileInfos.Count / 10;
            }
            else
            {
                TotalPages = _fileInfos.Count / 10 + 1;
            }

            if (isEndPage)
            {
                CurrentPage = _totalPages;
            }
            else
            {
                if (CurrentPage < 1)
                {
                    CurrentPage = 1;
                }
                else if (CurrentPage > _totalPages)
                {
                    CurrentPage = _totalPages;
                }
            }


            for (int i = (CurrentPage - 1) * 10; i < (CurrentPage - 1) * 10 + 10; i++)
            {
                if (i > (_fileInfos.Count - 1))
                    break;

                if (_fileInfos.Count > 0)
                    ShowFileInfos.Add(_fileInfos[i]);
            }

            RefreshShowPages();
        }

        public void RefreshShowPages()
        {
            ShowPages.Clear();
            if (_fileInfos.Count % 10 == 0)
            {
                TotalPages = _fileInfos.Count / 10;
            }
            else
            {
                TotalPages = _fileInfos.Count / 10 + 1;
            }

            if (_totalPages <= 5)
            {
                for (int i = 1; i <= _totalPages; i++)
                {
                    ShowPages.Add(i.ToString());
                }
            }
            else
            {
                if (CurrentPage < 3)
                {
                    for (int i = 1; i <= 5; i++)
                    {
                        ShowPages.Add(i.ToString());
                    }
                }
                else if (CurrentPage > _totalPages - 3)
                {
                    for (int i = _totalPages - 5; i <= _totalPages; i++)
                    {
                        ShowPages.Add(i.ToString());
                    }
                }
                else
                {
                    for (int i = CurrentPage - 2; i <= CurrentPage + 2; i++)
                    {
                        ShowPages.Add(i.ToString());
                    }
                }
            }
        }

        public void RefreshOrder()
        {
            for (int i = 0; i < FileInfos.Count; i++)
            {
                FileInfos[i].Order = i + 1;
            }
        }

        public void AllSelectedOrClear(bool isSelected)
        {
            foreach (var bfinf in ShowFileInfos)
            {
                bfinf.IsSelected = isSelected;
            }
        }


        #region 单例

        public AudioListViewModel()
        {
        }

        private static AudioListViewModel _instance = null;

        public static AudioListViewModel Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new AudioListViewModel();
                }

                return _instance;
            }
        }

        #endregion
    }
}