如何使用MVVM RelayCommand属性?



我一直在尝试属性,并在试图使用社区工具包中的RelayCommand属性时遇到问题。

我看了看.NET文档中的RelayCommand属性,并尝试实现一个简单的例子,如下所示:

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace HelloWorld_WinUI3.ViewModels;
public partial class MainViewModel : ObservableObject
{
public MainViewModel()
{
}
private int _counter = 0;
[RelayCommand]
private async Task DoSomethingAsync()
{
await Task.Delay(1000);
MyString = $"Hello {_counter++}";
}
[ObservableProperty]
private string _myString = "Hello"; 
}

这会产生错误:CS0616 'RelayCommand'不是一个属性类

有人能解释一下这段代码有什么问题,以及如何正确使用[RelayCommand]属性?

CommunityToolkit。Mvvm与winui3和。net7一起工作。实际上,我经常使用它,包括我为StackOverflow答案创建的每个示例。

我猜,你可能面临这个已知的问题。

所以,在这个时刻,尝试v8.0而不是v8.1。

使用MVVM源生成器在WinUI 3中仍然存在问题;我建议使用原始中继命令声明:

public class MyViewModel : ObservableObject
{
public MyViewModel()
{
IncrementCounterCommand = new RelayCommand(IncrementCounter);
}
private int counter;
public int Counter
{
get => counter;
private set => SetProperty(ref counter, value);
}
public ICommand IncrementCounterCommand { get; }
private void IncrementCounter() => Counter++;
}

目前看来,CommunityToolkit并没有完全支持WinUI3或。net 7。

在WPF项目上运行相同的示例可以正常工作。

  • [ObservableProperty]似乎在WinUI3项目中工作
  • [RelayCommand]不能在WinUI3项目中使用

最新更新