
.NET Community Toolkit — это коллекция классов-хелперов и API, которые могут использовать все .NET — разработчики и которые не зависят от конкретной платформы пользовательского интерфейса.
Toolkit поддерживается и публикуется Microsoft и является частью .NET Foundation.
.NET Community Toolkit — это наследник Windows Community Toolkit. Его появление разработчики объясняют следующим образом: со временем росло число библиотек API, использующих .NET и при этом не рассчитанных на работу с Windows. Поэтому было принято решение выделить отдельный проект, чтобы иметь возможность развиваться независимо и быть доступным для .NET-разработчиков не для Windows.
Так как последняя версия Windows Community Toolkit перед выделением нового проекта была 7.1.x, то было решено первый релиз .NET Community Toolkit обозначить как 8.0.0. В дальнейшем оба проекта будут развиваться и версионироваться независимо.
Библиотеки, входящие в .NET Community Toolkit:
-
CommunityToolkit.Common -
CommunityToolkit.Mvvm(aka “Microsoft MVVM Toolkit”) -
CommunityToolkit.Diagnostics -
CommunityToolkit.HighPerformance
Одним из самых важных компонентов Toolkit’a является MVVM Toolkit. В его основе лежит MVVMLight, ранее крайне популярная библиотека для разработки приложений с использованием паттерна MVVM (в настоящий момент не поддерживается). Для тех, кто до сих пор использует MVVMLight, есть план перехода на Microsoft MVVM Toolkit.
В двух словах о новых возможностях в версии 8.0.0 в плане именно MVVM Toolkit’a.
Заявлено интенсивное использований генераторов кода (source generators), что позволит сократить количество boilerplate-кода.
при объявлении и реализации Commands:
было:
private IRelayCommand<User> greetUserCommand; public IRelayCommand<User> GreetUserCommand => greetUserCommand ??= new RelayCommand<User>(GreetUser); private void GreetUser(User user) { Console.WriteLine($"Hello {user.Name}!"); }
стало:
[RelayCommand] private void GreetUser(User user) { Console.WriteLine($"Hello {user.Name}!"); }
при объявлении и реализации Observable properties:
было:
private string? firstName; public string? FirstName { get => firstName; set { if (SetProperty(ref firstName, value)) { OnPropertyChanged(nameof(FullName)); GreetUserCommand.NotifyCanExecuteChanged(); } } } private string? lastName; public string? LastName { get => lastName; set { if (SetProperty(ref lastName, value)) { OnPropertyChanged(nameof(FullName)); GreetUserCommand.NotifyCanExecuteChanged(); } } } public string? FullName => $"{FirstName} {LastName}";
стало:
[ObservableProperty] [NotifyPropertyChangedFor(nameof(FullName))] [NotifyCanExecuteChangedFor(nameof(GreetUserCommand))] private string? firstName; [ObservableProperty] [NotifyPropertyChangedFor(nameof(FullName))] [NotifyCanExecuteChangedFor(nameof(GreetUserCommand))] private string? lastName; public string? FullName => $"{FirstName} {LastName}";
Также при использовании атрибута [ObservableProperty] MVVM Toolkit сгенерирует два метода: On<PROPERTY_NAME>Changing и On<PROPERTY_NAME>Changed
Таким образом, конструкция вида
[ObservableProperty] private string name; partial void OnNameChanging(string name) { Console.WriteLine($"The name is about to change to {name}!"); } partial void OnNameChanged(string name) { Console.WriteLine($"The name just changed to {name}!"); }
развернётся в
public string Name { get => name; set { if (!EqualityComparer<string>.Default.Equals(name, value)) { OnNameChanging(value); OnPropertyChanging(); name = value; OnNameChanged(); OnPropertyChanged(); } } } partial void OnNameChanging(string name); partial void OnNameChanged(string name);
ссылка на оригинал статьи https://habr.com/ru/articles/681002/
Добавить комментарий