using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using NotesNet8.Models; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace NotesNet8.ViewModels { internal class NoteViewModel : ObservableObject, IQueryAttributable { private Note _note; public NoteViewModel() { _note = new Note(); SaveCommand = new AsyncRelayCommand(Save); DeleteCommand = new AsyncRelayCommand(Delete); } public NoteViewModel(Note note) { _note = note; SaveCommand = new AsyncRelayCommand(Save); DeleteCommand = new AsyncRelayCommand(Delete); } public string Text { get => _note.Text; set { if (_note.Text != value) { _note.Text = value; OnPropertyChanged(); } } } public ICommand SaveCommand { get; private set; } public ICommand DeleteCommand { get; private set; } public DateTime Date => _note.Date; public string Identifier => _note.Filename; private async Task Save() { _note.Date = DateTime.Now; _note.Save(); await Shell.Current.GoToAsync($"..?saved={_note.Filename}"); } private async Task Delete() { _note.Delete(); await Shell.Current.GoToAsync($"..?deleted={_note.Filename}"); } public void ApplyQueryAttributes(IDictionary query) { if (query.ContainsKey("load")) { _note = Note.Load(query["load"].ToString()); RefreshProperties(); } } public void Reload() { _note = Note.Load(_note.Filename); RefreshProperties(); } private void RefreshProperties() { OnPropertyChanged(nameof(Text)); OnPropertyChanged(nameof(Date)); } } }