感知数据变化
MVVM中一个重要的实践价值是视图能够感知数据的变化。手工的传统写法繁琐臃肿,NET Community Toolkit 通过源生成器来简化 MVVM,自动生成样本代码。
使用方法:
namespace MonkeyFinder.ViewModel;
public partial class BaseViewModel : ObservableObject
{
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsNotBusy))]
bool isBusy;
[ObservableProperty]
string title;
public bool IsNotBusy => !IsBusy;
}
带有[ObservableProperty]
特性的属性,当值改变时会通知UI。
查看生成的代码,需展开。
这是我们的 IsBusy 属性:
[global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", "8.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCode]
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
public bool IsBusy
{
get => isBusy;
set
{
if (!global::System.Collections.Generic.EqualityComparer<bool>.Default.Equals(isBusy, value))
{
OnPropertyChanging(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangingArgs.IsBusy);
isBusy = value;
OnPropertyChanged(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangedArgs.IsBusy);
OnPropertyChanged(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangedArgs.IsNotBusy);
}
}
}
这段代码可能看起来有点吓人,但由于它是自动生成的,它添加了额外的属性以避免冲突。 它还通过缓存进行了高度优化。