本文主要是介绍CommunityToolkit.Mvvm源生成器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
引言
MVVM 工具包包含全新的 Roslyn 源生成器,有助于在使用 MVVM 体系结构编写代码时大幅减少样板。这意味着,在编写代码时,MVVM 工具包生成器现在将负责在后台为你生成其他代码。
以前:
private string? name;public string? Name
{get => name;set => SetProperty(ref name, value);
}private void SayHello()
{Console.WriteLine("Hello");
}private ICommand? sayHelloCommand;public ICommand SayHelloCommand => sayHelloCommand ??= new RelayCommand(SayHello);
现在:
[ObservableProperty]
private string? name;[RelayCommand]
private void SayHello()
{Console.WriteLine("Hello");
}
利用特性可以自动后台生成冗余代码,根据字段自动公开一个首字母大写的属性,可供View绑定使用。
需要继承 ObservableObject
ObservableProperty特性
除了帮我们自动生成更改通知代码,还可以:
1、便捷的更改时或更改后运行代码编写
[ObservableProperty]
private string? name;
对于上述代码,工具包会为我们自动生成以下代码:
public string? Name
{get => name;set{if (!EqualityComparer<string?>.Default.Equals(name, value)){string? oldValue = name;OnNameChanging(value);OnNameChanging(oldValue, value);OnPropertyChanging();name = value;OnNameChanged(value);OnNameChanged(oldValue, value);OnPropertyChanged();}}
}partial void OnNameChanging(string? value);
partial void OnNameChanged(string? value);partial void OnNameChanging(string? oldValue, string? newValue);
partial void OnNameChanged(string? oldValue, string? newValue);
其中为我们准备了四个分布方法,分别在值改变中 或 改变后被调用。如有需要我们可以通过重写该方法达到想要的目的,如下:
[ObservableProperty]
private string? name;partial void OnNameChanging(string? value)
{Console.WriteLine($"Name is about to change to {value}");
}partial void OnNameChanged(string? value)
{Console.WriteLine($"Name has changed to {value}");
}
2、通知依赖属性
FullName属性与之相关联、依赖
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(FullName))]
private string? name;public string FullName{get=>"123"+Name}
3、通知依赖命令
MyMethodCommand命令,其执行状态依赖于此属性的值。 也就是说,每当此属性发生更改时,命令的执行状态都应失效并再次计算
[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(MyMethodCommand))]
private string? name;[RelayCommand(CanExecute = nameof(CanExecute))]
private void MyMethod()
{Console.WriteLine("Hello!");
}bool CanExecute => Name.Length > 10
4、属性验证
如果在继承自 ObservableValidator 的类型中声明属性,则可以使用任何验证特性对该属性进行标记,然后请求生成的资源库触发对该属性的验证。 可以使用 NotifyDataErrorInfo
特性实现此目的:
[ObservableProperty]
[NotifyDataErrorInfo]
[Required]
[MinLength(2)] // Any other validation attributes too...
private string? name;
这篇关于CommunityToolkit.Mvvm源生成器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!