using ModbusDemo.Uitls; using Prism.Commands; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace ModbusDemo.VIewModel { class SettingsUCViewModel : BindableBase { //控制页面跳转 private readonly IRegionManager _regionManager; //断开连接的命令 public DelegateCommand DisConnectionCmm { get; set; } //链接窗口的命令 public DelegateCommand ConnectionCmm { get; set; } //获取串口 private SerialPort _serialPort; //设置串口名字 private string _portName = "COM3"; public string PortName { get { return _portName; } set { _portName = value; RaisePropertyChanged(); } } //设置波特率 private string _baudRate = "9600"; public string BaudRate { get { return _baudRate; } set { _baudRate = value; RaisePropertyChanged(); } } //设置数据位 private string _dataBits = "8"; public string DataBits { get { return _dataBits; } set { _dataBits = value; RaisePropertyChanged(); } } //设置校验位 private Parity _parity = Parity.Even; public Parity Parity { get { return _parity; } set { _parity = value; RaisePropertyChanged(); } } //设置停止位 private StopBits _stopBits = StopBits.One; public StopBits StopBits { get { return _stopBits; } set { _stopBits = value; RaisePropertyChanged(); } } public SettingsUCViewModel() { } /// /// 从容器中获取创建的窗口 /// /// public SettingsUCViewModel(SerialPort serialPort, IRegionManager regionManager) { _serialPort = serialPort; ConnectionCmm = new DelegateCommand(Connection); DisConnectionCmm = new DelegateCommand(DisConnection); _regionManager = regionManager; } private void DisConnection() { if (_serialPort.IsOpen) { _serialPort.Close(); MessageBox.Show("连接已经断开"); } } /// /// 串口参数设置 /// private void Connection() { //TODO,做数据的判空处理 if (!_serialPort.IsOpen) { _serialPort.PortName = GetComboBoxItemValue(this.PortName); _serialPort.BaudRate = int.Parse(GetComboBoxItemValue(this.BaudRate)); _serialPort.Parity = this.Parity; _serialPort.StopBits = this.StopBits; _serialPort.DataBits = int.Parse(GetComboBoxItemValue(this.DataBits)); //读取超时时间 _serialPort.ReadTimeout = 500; //写入超时时间 _serialPort.WriteTimeout = 500; try { _serialPort.Open(); MessageBox.Show("串口链接成功"); _regionManager.Regions["ModbusRegion"].RequestNavigate("CoilUC"); } catch (Exception) { MessageBox.Show("串口已经链接,请先断开链接在尝试","warning",MessageBoxButton.OK,MessageBoxImage.Warning); } } } /// /// 处理下拉框的选择信息 /// /// /// private string GetComboBoxItemValue(string ComboBoxItem) { string displayText = ComboBoxItem.ToString(); string cleanText = displayText.Replace("System.Windows.Controls.ComboBoxItem: ", ""); return cleanText; } } }