WorkRunViewModel.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. using DefaultEdit.Communication;
  2. using DefaultEdit.Core;
  3. using DefaultEdit.Log4xml;
  4. using DefaultEdit.Model;
  5. using DefaultEdit.Views;
  6. using Microsoft.Xaml.Behaviors;
  7. using Prism.Commands;
  8. using Prism.Events;
  9. using Prism.Ioc;
  10. using Prism.Mvvm;
  11. using Prism.Regions;
  12. using System;
  13. using System.Collections.ObjectModel;
  14. using System.Collections.Specialized;
  15. using System.Diagnostics;
  16. using System.Threading;
  17. using System.Windows.Controls;
  18. namespace DefaultEdit.ViewModels
  19. {
  20. public class WorkRunViewModel : BindableBase
  21. {
  22. private Management _management;
  23. private IContainerProvider _container;
  24. private IEventAggregator _eventAggregator;
  25. private IRegionManager _regionManager;
  26. private ObservableCollection<string> _Logs = new ObservableCollection<string>();
  27. public ObservableCollection<string> Logs { get => _Logs; set => _Logs = value; }
  28. public Management Management { get => _management; set => _management = value ; }
  29. private DelegateCommand _OpenRoleLoginViewCommand;
  30. public DelegateCommand OpenRoleLoginViewCommand =>
  31. _OpenRoleLoginViewCommand ?? ( _OpenRoleLoginViewCommand = new DelegateCommand(RoleLoginViewShow) );
  32. private DelegateCommand _DLoginCommand;
  33. public DelegateCommand DLoginCommand =>
  34. _DLoginCommand ?? (_DLoginCommand = new DelegateCommand(DLoginViewShow));
  35. private DelegateCommand _SwitchModeCommand;
  36. public DelegateCommand SwitchModeCommand =>
  37. _SwitchModeCommand ?? ( _SwitchModeCommand = new DelegateCommand(SwitchModeMethod) );
  38. private DelegateCommand _ClearRunDataCommand;
  39. public DelegateCommand ClearRunDataCommand =>
  40. _ClearRunDataCommand ?? ( _ClearRunDataCommand = new DelegateCommand(ClearRunData) );
  41. private DelegateCommand _ClearLogDataCommand;
  42. public DelegateCommand ClearLogDataCommand =>
  43. _ClearLogDataCommand ?? ( _ClearLogDataCommand = new DelegateCommand(ClearLogData) );
  44. public WorkRunViewModel(IContainerProvider container, IRegionManager regionManager, IEventAggregator eventAggregator)
  45. {
  46. _container = container;
  47. _eventAggregator = eventAggregator;
  48. _regionManager = regionManager;
  49. Management = container.Resolve<Management>();
  50. LogHelper.logChangHandler += ShowLog;
  51. LogHelper.Info("===========================程序启动==========================");
  52. Management.CurentApplicationSettings = FileHelper.ReadApplicationConfiguration();
  53. LogHelper.Info("加载配置文件完成");
  54. Management. ConnectPlc();
  55. //创建一个定时器,每秒更新一次时间
  56. var timer = new System.Timers.Timer(1000);
  57. timer.Elapsed += (sender, e) =>
  58. {
  59. Management.DateTimeNow = DateTime.Now;
  60. };
  61. timer.Start();
  62. }
  63. private void ShowLog(Log4xml.Log log)
  64. {
  65. System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
  66. {
  67. string str = log.Msg.Trim();
  68. while ( true )
  69. {
  70. if ( str.Length > 80 )
  71. {
  72. Logs.Add(str.Substring(0, 80));
  73. str = log.Time + " " + str.Substring(80);
  74. }
  75. else
  76. {
  77. Logs.Add(str);
  78. break;
  79. }
  80. }
  81. if ( Logs.Count > 100 )
  82. {
  83. Logs.RemoveAt(0);
  84. }
  85. }));
  86. }
  87. void SwitchModeMethod()
  88. {
  89. if (Management.Ismeswork)
  90. {
  91. Management.Ismeswork = false;
  92. }
  93. else
  94. {
  95. Management.Ismeswork = true;
  96. }
  97. }
  98. void ClearRunData()
  99. {
  100. Management.RuningData.Clear();
  101. }
  102. void ClearLogData()
  103. {
  104. Logs.Clear();
  105. }
  106. void RoleLoginViewShow()
  107. {
  108. RoleLoginView roleLoginView = new RoleLoginView();
  109. roleLoginView.ShowDialog();
  110. }
  111. void DLoginViewShow()
  112. {
  113. Management.UserId = "";
  114. Management.UserName = "";
  115. }
  116. }
  117. public class AutoScrollBehavior : Behavior<ListBox>
  118. {
  119. protected override void OnAttached()
  120. {
  121. base.OnAttached();
  122. var items = AssociatedObject.Items;
  123. if ( items is INotifyCollectionChanged incc )
  124. {
  125. incc.CollectionChanged += OnCollectionChanged;
  126. }
  127. }
  128. private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
  129. {
  130. if ( e.Action == NotifyCollectionChangedAction.Add && AssociatedObject.HasItems )
  131. {
  132. AssociatedObject.Dispatcher.BeginInvoke(new Action(() =>
  133. {
  134. AssociatedObject.ScrollIntoView(AssociatedObject.Items[ AssociatedObject.Items.Count - 1 ]);
  135. }));
  136. }
  137. }
  138. protected override void OnDetaching()
  139. {
  140. if ( AssociatedObject.Items is INotifyCollectionChanged incc )
  141. {
  142. incc.CollectionChanged -= OnCollectionChanged;
  143. }
  144. base.OnDetaching();
  145. }
  146. }
  147. }