using DM_Weight.Common; using DM_Weight.msg; using DM_Weight.Port; using DM_Weight.util; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Xml; namespace DM_Weight.ViewModels { public class FridgeOnlyWindowViewModel : BindableBase, IRegionMemberLifetime, INavigationAware { //温度区间 private string _temperatureRange = CommonClass.ReadAppSetting("temperatureRange").ToString(); public string TemperatureRange { get => _temperatureRange; set { SetProperty(ref _temperatureRange, value); //更新配置文件中冰箱温度区间 CommonClass.SaveAppSetting("temperatureRange", _temperatureRange); } } private float defaultValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue")); //温度值 private float _temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue")); public float TemperatureValue { get => _temperatureValue; set => SetProperty(ref _temperatureValue, value); } /// /// 根据冰箱温度控制保存按钮是否可点击 /// private bool _isInvalid; public bool IsInvalid { get => _isInvalid; set { SetProperty(ref _isInvalid, value); BtnIsEnable = !IsInvalid; } } /// /// 根据冰箱温度控制保存按钮是否可用 /// private bool _btnIsEnable = true; public bool BtnIsEnable { get => _btnIsEnable; set => SetProperty(ref _btnIsEnable, value); } //冰箱状态:true关;false开 private bool _fridgeState; public bool FridgeState { get => _fridgeState; set => SetProperty(ref _fridgeState, value); } //报警状态:true关;false开 private bool _alarmState; public bool AlarmState { get => _alarmState; set => SetProperty(ref _alarmState, value); } private int _defaultLoginMode;//1开0关 private int _defaultAlarmMode;//1开0关 private float retTemperature = Convert.ToSingle(ConfigurationManager.AppSettings["temperatureValue"]); private PortUtil _portUtil; IEventAggregator _eventAggregator; public FridgeOnlyWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator) { _portUtil = portUtil; _eventAggregator = eventAggregator; } /// /// 保存按钮 /// //public DelegateCommand SaveCommand { get => new DelegateCommand(SaveAction, () => !IsInvalid); } public bool KeepAlive => false; //private async void SaveAction() //{ // try // { // _portUtil.FridgeOperate = true; // //设置温度值验证不通过则直接返回不保存 // //获取冰箱温度 // //if (_fridgeState != _defaultLoginMode.Equals(1)) // //{ // // ConfigurationManager.RefreshSection("FridgeState"); // //发送冰箱使能/失能指令 // if (_fridgeState) // { // await _portUtil.FridgeOff(1); // Thread.Sleep(100); // CommonClass.SaveAppSetting("FridgeState", "0"); // } // else // { // await _portUtil.FridegOpen(1); // Thread.Sleep(100); // CommonClass.SaveAppSetting("FridgeState", "1"); // } // //发送警报使能/失能指令 // if (_alarmState) // { // await _portUtil.FridgeAlarmOff(1); // Thread.Sleep(100); // CommonClass.SaveAppSetting("AlarmState", "0"); // } // else // { // await _portUtil.FridgeAlarmOn(1); // Thread.Sleep(100); // CommonClass.SaveAppSetting("AlarmState", "1"); // } // //设定冰箱1温度区间 // string[] range = ConfigurationManager.AppSettings["temperatureRange"].Split('-'); // string[] newRange = TemperatureRange.Split('-'); // if (range.Length >= 2) // { // bool bMix = float.TryParse(range[0], out float Min); // bool bMax = float.TryParse(range[1], out float Max); // if (bMix && bMax) // { // if (Min != Convert.ToSingle(newRange[0])) // { // //设定冰箱温度最小值 // await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange[0]), 1); // Thread.Sleep(100); // } // if (Max != Convert.ToSingle(newRange[1])) // { // Thread.Sleep(100); // //设定冰箱温度最大值 // await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange[1]), 1); // Thread.Sleep(100); // } // } // } // _portUtil.FridgeOperate = false; // AlertMsg alertMsg = new AlertMsg // { // Message = $"保存成功", // Type = MsgType.SUCCESS // }; // _eventAggregator.GetEvent().Publish(alertMsg); // } // catch (Exception ex) // { // AlertMsg alertMsg = new AlertMsg // { // Message = $"保存异常{ex.ToString}", // Type = MsgType.ERROR // }; // _eventAggregator.GetEvent().Publish(alertMsg); // _portUtil.FridgeOperate = false; // } //} //手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题 public int ReadAppSetting(string key) { string xPath = "/configuration/appSettings//add[@key='" + key + "']"; XmlDocument doc = new XmlDocument(); string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name; doc.Load(exeFileName + ".dll.config"); XmlNode node = doc.SelectSingleNode(xPath); return Convert.ToInt32(node.Attributes["value"].Value); } public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) { } public void OnNavigatedTo(NavigationContext navigationContext) { _fridgeState = ReadAppSetting("FridgeState").Equals(0); _defaultLoginMode = ReadAppSetting("FridgeState"); _defaultAlarmMode = ReadAppSetting("AlarmState"); _alarmState = ReadAppSetting("AlarmState").Equals(0); GetTemperature(); } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } //获取冰箱温度值,如有更改则保存更改 private async Task GetTemperature() { //float retT = await _portUtil.GetFridgeTemperature(); } } }