Newer
Older
Correlator / PipeGallery / ViewModel / MainViewModel.cs
pengxianhong on 20 Jan 2022 3 KB 格式化代码
using PipeGallery.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Threading;


namespace PipeGallery.ViewModel
{
    public class MainViewModel : ModelBase
    {
        [System.Runtime.InteropServices.DllImport("kernel32.dll", EntryPoint = "GetSystemPowerStatus")]
        private static extern void GetSystemPowerStatus(ref SYSTEM_POWER_STATUS lpSystemPowerStatus);

        public struct SYSTEM_POWER_STATUS
        {
            public Byte ACLineStatus; //0 = offline, 1 = Online, 255 = UnKnown Status.   
            public Byte BatteryFlag;
            public Byte BatteryLifePercent;
            public Byte Reserved1;
            public int BatteryLifeTime;
            public int BatteryFullLifeTime;
        }

        string _currentTime = string.Empty;

        public string CurrentTime
        {
            get { return _currentTime; }
            set
            {
                if (_currentTime != value)
                {
                    _currentTime = value;
                    RaisePropertyChanged("CurrentTime");
                }
            }
        }

        /// <summary>
        /// 电量 0-100
        /// </summary>
        double _battery = 0;

        public double Battery
        {
            get { return _battery; }
            set
            {
                if (_battery != value)
                {
                    _battery = value;
                    RaisePropertyChanged("Battery");
                }
            }
        }


        #region 单例

        public MainViewModel()
        {
        }

        private static MainViewModel _instance = null;

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

                    //启动一个定时器,改变绑定时间数值
                    DispatcherTimer timer = new DispatcherTimer();
                    timer.Interval = TimeSpan.FromSeconds(1);
                    timer.Tick += delegate
                    {
                        DateTime dateTime = DateTime.Now;
                        String strDateTime = dateTime.ToString("yyyy年MM月dd日 ") +
                                             dateTime.ToString("dddd", new System.Globalization.CultureInfo("zh-cn")) +
                                             dateTime.ToString(" HH:mm:ss");
                        MainViewModel.Instance.CurrentTime = strDateTime;
                    };
                    timer.Start();

                    DispatcherTimer timerBattery = new DispatcherTimer();
                    timerBattery.Interval = TimeSpan.FromSeconds(300);

                    SYSTEM_POWER_STATUS SysPower = new SYSTEM_POWER_STATUS();
                    GetSystemPowerStatus(ref SysPower);
                    MainViewModel.Instance.Battery = SysPower.BatteryLifePercent;

                    timerBattery.Tick += delegate
                    {
                        GetSystemPowerStatus(ref SysPower);
                        MainViewModel.Instance.Battery = SysPower.BatteryLifePercent;
                    };
                    timerBattery.Start();
                }

                return _instance;
            }
        }

        #endregion
    }
}