LogBarViewModel.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using CommunityToolkit.Mvvm.ComponentModel;
  2. using PLCIOPointTool.Services;
  3. using System.Collections.ObjectModel;
  4. namespace PLCIOPointTool.ViewModels;
  5. public partial class LogBarViewModel : ObservableObject, IDisposable
  6. {
  7. private readonly ILogService _logService;
  8. private const int MaxLogCount = 100;
  9. private bool disposedValue;
  10. [ObservableProperty]
  11. private ObservableCollection<string> _logs = [];
  12. public LogBarViewModel(ILogService logService)
  13. {
  14. _logService = logService;
  15. _logService.MessageReceived += OnMessageReceived;
  16. }
  17. private void OnMessageReceived(object? sender, LogEventArgs e)
  18. {
  19. App.Current.Dispatcher.BeginInvoke(() =>
  20. {
  21. if (Logs.Count >= MaxLogCount)
  22. {
  23. Logs.RemoveAt(Logs.Count - 1);
  24. }
  25. Logs.Insert(0, $"[{e.LogTime}] [{e.LogType}] [{e.Message}]");
  26. });
  27. }
  28. #region Dispose
  29. protected virtual void Dispose(bool disposing)
  30. {
  31. if (!disposedValue)
  32. {
  33. if (disposing)
  34. {
  35. // TODO: dispose managed state (managed objects)
  36. _logService.MessageReceived -= OnMessageReceived;
  37. Logs.Clear();
  38. }
  39. // TODO: free unmanaged resources (unmanaged objects) and override finalizer
  40. // TODO: set large fields to null
  41. disposedValue = true;
  42. }
  43. }
  44. // // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources
  45. // ~OutputBarViewModel()
  46. // {
  47. // // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
  48. // Dispose(disposing: false);
  49. // }
  50. public void Dispose()
  51. {
  52. // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
  53. Dispose(disposing: true);
  54. GC.SuppressFinalize(this);
  55. }
  56. #endregion
  57. }