LogViewModel.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using Avalonia.Collections;
  2. using Shaker.Models;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace ShakerApp.ViewModels
  8. {
  9. internal class LogViewModel:ViewModelBase<IModel>
  10. {
  11. private object locker = new object();
  12. public AvaloniaList<IndexValueItemViewModel<LogItemViewModel>> Logs { get; } = new AvaloniaList<IndexValueItemViewModel<LogItemViewModel>>();
  13. private LogViewModel()
  14. {
  15. ButtonVisibily = false;
  16. Content = typeof(Views.LogsView);
  17. GetEvent<Models.LogItemModel>().Subscrip((sender, args) =>
  18. {
  19. lock (locker)
  20. {
  21. Tools.DispatherInovke.Inovke(()=> Logs.Add(new IndexValueItemViewModel<LogItemViewModel>(Logs.Count+1,new LogItemViewModel(args.Data.Message,args.Data.LogType))));
  22. }
  23. });
  24. GetEvent(nameof(Models.LogItemModel)).Subscrip((sender, args) =>
  25. {
  26. if(args.Data.Length >=2 && args.Data[0] is string msg && args.Data[1] is LogType type)
  27. {
  28. AddLog(msg, type);
  29. }
  30. });
  31. }
  32. static LogViewModel()
  33. {
  34. }
  35. public void AddLog(string msg,LogType logType = LogType.Info)
  36. {
  37. lock (locker)
  38. {
  39. Tools.DispatherInovke.Inovke(()=> Logs.Add(new IndexValueItemViewModel<LogItemViewModel>(Logs.Count + 1, new LogItemViewModel(msg, logType))));
  40. }
  41. }
  42. public static LogViewModel Instance { get; } = new LogViewModel();
  43. }
  44. }