MainPageViewModel.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using WpfApp29.Models;
  9. using WpfApp29.Pages;
  10. using WpfApp29.UserControls;
  11. using WpfApp29.UserControls.Base;
  12. namespace WpfApp29.ViewModels
  13. {
  14. internal class MainPageViewModel : BaseViewModel
  15. {
  16. public MainPageViewModel()
  17. {
  18. UpadeRepeat();
  19. }
  20. public WrapPanel? WpTasks => (AppHelper.GetWindowAtType<UserWindow>()?.FramePages.Content as MainPage)?.WpTasks;
  21. private Filter _filter = new Filter();
  22. public Filter Filter
  23. {
  24. get
  25. {
  26. return _filter;
  27. }
  28. set
  29. {
  30. _filter = value;
  31. OnPropertyChanged();
  32. }
  33. }
  34. private string _userLoginString = "";
  35. public string UserLoginString
  36. {
  37. get
  38. {
  39. return _userLoginString;
  40. }
  41. set
  42. {
  43. _userLoginString = value;
  44. OnPropertyChanged();
  45. }
  46. }
  47. public RelayCommand? _commandAddTask;
  48. public RelayCommand CommandAddTask
  49. {
  50. get
  51. {
  52. return _commandAddTask ??= new RelayCommand(
  53. x =>
  54. {
  55. new TaskCreationWindow().Show();
  56. });
  57. }
  58. }
  59. public void UpdateWpTasks()
  60. {
  61. if (WpTasks == null) return;
  62. WpTasks.Children.Clear();
  63. MainContext ctx = new MainContext();
  64. List<Models.Task> tasks = ctx.Tasks.ToList();
  65. if (Filter.WhereTaskUserLogin)
  66. {
  67. tasks = tasks.Where(task => task.UserCreator?.Login.Contains(UserLoginString) ?? false).ToList();
  68. tasks = tasks.OrderByDescending(task => task.UserCreator?.Equals(UserLoginString)).ToList();
  69. }
  70. if (Filter.DateUp)
  71. {
  72. tasks = tasks.OrderBy(task => task.Date).ToList();
  73. }
  74. else if (Filter.DateDown)
  75. {
  76. tasks = tasks.OrderByDescending(task => task.Date).ToList();
  77. }
  78. int row = 0;
  79. tasks.ForEach(task =>
  80. {
  81. UIElement children;
  82. if (task.StatusId == 4 && task.UserCreatorId == User.CurrentUser?.Id && Filter.WhereTaskDelete)
  83. {
  84. children = new TaskDeleteUserControl();
  85. }
  86. else if (task.StatusId == 4)
  87. {
  88. return;
  89. }
  90. else if (task.StatusId == 3 && Filter.WhereTaskDone && (task.UserCreatorId == User.CurrentUser?.Id || task.UserDoerId == User.CurrentUser?.Id || Filter.WhereTaskSomeone))
  91. {
  92. children = new TaskDoneUserControl();
  93. }
  94. else if (task.UserDoerId == User.CurrentUser?.Id && task.StatusId == 2 && Filter.WhereTaskDoing)
  95. {
  96. children = new TaskDoerUserControl();
  97. }
  98. else if (task.UserCreatorId == User.CurrentUser?.Id && Filter.WhereTaskCreator)
  99. {
  100. children = new TaskCreatorUserControl();
  101. }
  102. else if (task.StatusId == 1 && Filter.WhereTaskAccess)
  103. {
  104. children = new TaskEmptyUserControl();
  105. }
  106. else
  107. {
  108. return;
  109. }
  110. (children as ITaskUserControl)?.HasTask(task);
  111. Grid.SetRow(children, row);
  112. WpTasks.Children.Add(children);
  113. row++;
  114. });
  115. }
  116. private async void UpadeRepeat()
  117. {
  118. while (true)
  119. {
  120. UpdateWpTasks();
  121. OnPropertyChanged();
  122. await System.Threading.Tasks.Task.Delay(200);
  123. }
  124. }
  125. }
  126. }