在我的视图模型中,我想使用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。