无法使用 CommunityToolkit.Mvvm 在视图模型中使用 ICommand 属性



在我的视图模型中,我想使用CommunityToolkit中的源生成器。Mvvm,但由于某种原因,我似乎不能使用[ICommand]属性与我的动作方法。

我得到的错误是:

不能应用属性类'ICommand',因为它是抽象的

这是我的视图模型模型的基类。

using CommunityToolkit.Mvvm.ComponentModel;
namespace MyApp.ViewModels
{
public partial class BaseViewModel : ObservableObject
{
[ObservableProperty]
bool isBusy = false;
[ObservableProperty]
string title = string.Empty;
}
}

这是我的视图模型类:

public class MyViewModel : BaseViewModel
{
[ObservableProperty]
string firstName;
[ObservableProperty]
string lastName;
[ICommand] // <-- This is where I get the error I mentioned above
async Task DoSomething()
{
// Do something here...
}
}

问题似乎是@Luca Clavarino在评论中提到的:

也许您不小心使用了System.Windows的iccommand界面。输入,而不是CommunityTookit中的ICommandAttribute。试着用[CommunityToolkit.Mvvm.Input.ICommand]代替[ICommand],看看是不是这样。

我想我知道为什么这会发生在你身上。ICommandAttribute似乎在CommunityToolkit中丢失了。Mvvm 8.0.0-preview4所以智能感知不会提供using CommunityToolkit.Mvvm.Input语句,而是提供using System.Windows.Input;

问题可以通过降级到CommunityToolkit来解决。Mvvm 8.0.0-preview3,那个版本对我来说很好。

下面是一个工作示例(使用CommunityToolkit)。Mvvm 8.0.0-preview3)。

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace MyApp.ViewModels
{
public partial class BaseViewModel : ObservableObject
{
[ObservableProperty]
bool isBusy = false;
[ObservableProperty]
string title = string.Empty;
}
public partial class MyViewModel : BaseViewModel
{
[ObservableProperty]
string firstName;
[ObservableProperty]
string lastName;
[ICommand] //works in 8.0.0-preview3
async Task DoSomething()
{
// Do something here...
}
}
}

我也注意到,虽然ICommandAttribute不见了在8.0.0-preview4中,有一个RelayCommandAttribute代替。也许他们只是把它重命名了。

使用RelayCommandAttribute代替ICommandAttribute在8.0.0-preview4似乎工作。

[RelayCommand] //works in 8.0.0-preview4
async Task DoSomething()
{
// Do something here...
}

编辑

是的,他们已经将ICommandAttribute重命名为RelayCommandAttribute。在8.0.0-preview4发布说明的重大更改部分中提到了这一点。

接受的答案有很多文字只是说在8.0.0预览4中[ICommand]属性被重命名为[RelayCommand]。它被列在发行说明的重大变更中。

适用于8.0.0-preview3而不是8.0.0-preview4或最新版本8.0.0。

相关内容

  • 没有找到相关文章

最新更新