LogBarViewModel.cs 1.7 KB

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