Untitled
unknown
plain_text
2 years ago
1.9 kB
3
Indexable
public class MainViewModel : ViewModelBase { public ObservableCollection<Category> Categories { get; set; } = new ObservableCollection<Category>(); public MainViewModel() { Categories.CollectionChanged += Categories_CollectionChanged; } private void Categories_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Add) { foreach (Category category in e.NewItems) { category.Tasks.CollectionChanged += Tasks_CollectionChanged; } } else if (e.Action == NotifyCollectionChangedAction.Remove) { foreach (Category category in e.OldItems) { category.Tasks.CollectionChanged -= Tasks_CollectionChanged; } } } private void Tasks_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Remove) { foreach (Task task in e.OldItems) { if (Categories.Any(c => c.Tasks.Contains(task))) { continue; } if (string.IsNullOrWhiteSpace(task.Category)) { Categories[0].Tasks.Add(task); } else { Categories.Add(new Category { Name = task.Category, Tasks = new ObservableCollection<Task> { task } }); } } } } public void AddCategory(string name) { Categories.Add(new Category { Name = name }); } public void AddTask(string title, string description, Category category) { category.Tasks.Add(new Task { Title = title, Description = description, Category = category.Name }); } }
Editor is loading...