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 } }