Код IT
← Каталог

Практикум WPF — основы MVVM — CommunityToolkit.Mvvm — меньше boilerplate

Фрагмент из «Практикум WPF — основы MVVM»: CommunityToolkit.Mvvm — меньше boilerplate.

csharp desktopencyclopediawpf-praktikum-2 embed URL статья в энциклопедии
C# main.cs
public partial class TaskListViewModel : ObservableObject
{
    private readonly ITaskRepository _repository;

    [ObservableProperty]
    private string _newTitle = "";

    public ObservableCollection<TaskItemViewModel> Tasks { get; } = new();

    [RelayCommand(CanExecute = nameof(CanAddTask))]
    private async Task AddTaskAsync()
    {
        var item = new TaskItem { Title = NewTitle.Trim() };
        await _repository.CreateAsync(item);
        Tasks.Add(TaskItemViewModel.FromModel(item));
        NewTitle = "";
    }

    private bool CanAddTask() => !string.IsNullOrWhiteSpace(NewTitle);
}
public partial class TaskListViewModel : ObservableObject
{
    private readonly ITaskRepository _repository;

    [ObservableProperty]
    private string _newTitle = "";

    public ObservableCollection<TaskItemViewModel> Tasks { get; } = new();

    [RelayCommand(CanExecute = nameof(CanAddTask))]
    private async Task AddTaskAsync()
    {
        var item = new TaskItem { Title = NewTitle.Trim() };
        await _repository.CreateAsync(item);
        Tasks.Add(TaskItemViewModel.FromModel(item));
        NewTitle = "";
    }

    private bool CanAddTask() => !string.IsNullOrWhiteSpace(NewTitle);
}