using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using WpfApp29.Models; using WpfApp29.Pages; using WpfApp29.UserControls; using WpfApp29.UserControls.Base; namespace WpfApp29.ViewModels { internal class MainPageViewModel : BaseViewModel { public MainPageViewModel() { UpadeRepeat(); } public WrapPanel? WpTasks => (AppHelper.GetWindowAtType()?.FramePages.Content as MainPage)?.WpTasks; private Filter _filter = new Filter(); public Filter Filter { get { return _filter; } set { _filter = value; OnPropertyChanged(); } } private string _userLoginString = ""; public string UserLoginString { get { return _userLoginString; } set { _userLoginString = value; OnPropertyChanged(); } } public RelayCommand? _commandAddTask; public RelayCommand CommandAddTask { get { return _commandAddTask ??= new RelayCommand( x => { new TaskCreationWindow().Show(); }); } } public void UpdateWpTasks() { if (WpTasks == null) return; WpTasks.Children.Clear(); MainContext ctx = new MainContext(); List tasks = ctx.Tasks.ToList(); if (Filter.WhereTaskUserLogin) { tasks = tasks.Where(task => task.UserCreator?.Login.Contains(UserLoginString) ?? false).ToList(); tasks = tasks.OrderByDescending(task => task.UserCreator?.Equals(UserLoginString)).ToList(); } if (Filter.DateUp) { tasks = tasks.OrderBy(task => task.Date).ToList(); } else if (Filter.DateDown) { tasks = tasks.OrderByDescending(task => task.Date).ToList(); } int row = 0; tasks.ForEach(task => { UIElement children; if (task.StatusId == 4 && task.UserCreatorId == User.CurrentUser?.Id && Filter.WhereTaskDelete) { children = new TaskDeleteUserControl(); } else if (task.StatusId == 4) { return; } else if (task.StatusId == 3 && Filter.WhereTaskDone && (task.UserCreatorId == User.CurrentUser?.Id || task.UserDoerId == User.CurrentUser?.Id || Filter.WhereTaskSomeone)) { children = new TaskDoneUserControl(); } else if (task.UserDoerId == User.CurrentUser?.Id && task.StatusId == 2 && Filter.WhereTaskDoing) { children = new TaskDoerUserControl(); } else if (task.UserCreatorId == User.CurrentUser?.Id && Filter.WhereTaskCreator) { children = new TaskCreatorUserControl(); } else if (task.StatusId == 1 && Filter.WhereTaskAccess) { children = new TaskEmptyUserControl(); } else { return; } (children as ITaskUserControl)?.HasTask(task); Grid.SetRow(children, row); WpTasks.Children.Add(children); row++; }); } private async void UpadeRepeat() { while (true) { UpdateWpTasks(); OnPropertyChanged(); await System.Threading.Tasks.Task.Delay(200); } } } }