CommunityToolkit.Mvvm
Post date:
Author: goddenty
https://learn.microsoft.com/zh-cn/dotnet/communitytoolkit/mvvm/generators/overview
<PackageReference Include=”CommunityToolkit.Mvvm” Version=”8.2.0″ />
Summary:
该库主要用于在Maui中,方便的设置ViewModel中的绑定的属性和命令。
使用:
// 需要使用partial关键字
[ObservableObject]
public partial class MainPageViewModel
{
// 添加此注解后,会自动生成具有通知能力的Title属性
[ObservableProperty]
string title;
// 给私有方法添加此注解后,会自动生成CounterCommand属性,
// 并绑定到此方法,且能识别带参数和不带参数的方法。
// 且此方法的返回值也可以是Task
[RelayCommand]
private void Counter(string str)
{
this.Title = str+Guid.NewGuid().ToString();
}
}
[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}");
}
[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(LoginCommand))]
private string username;
[RelayCommand(CanExecute = nameof(CanLoginExecute))]
public async Task Login(string para, CancellationToken cancellationToken)
{
HttpClient httpClient = new HttpClient();
await httpClient.GetAsync("https://www.baidu.com", HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);
MessageBox.Show(para);
}
private bool CanLoginExecute()
{
if (string.IsNullOrEmpty(Username))
{
return false;
}
if (Username.Length <= 3)
{
return false;
}
return true;
}