C# 切换到MVVMLight时出现CanExecute问题

C# 切换到MVVMLight时出现CanExecute问题,c#,wpf,mvvm-light,C#,Wpf,Mvvm Light,我一直在使用我从一篇文章()中复制的RelayCommand,下面的CreateExamCommand工作正常,CanExecute绑定到“Name”是否为空 XAML Csharp public RelayCommand CreateExamCommand=>new RelayCommand( ()=>CreateExam(名称、日期), ()=>!string.IsNullOrEmpty(\u name) ); 但是,我只是安装了MVVMLightLibs,以替换手动复制的代码(并删除

我一直在使用我从一篇文章()中复制的
RelayCommand
,下面的
CreateExamCommand
工作正常,
CanExecute
绑定到“Name”是否为空

XAML

Csharp
public RelayCommand CreateExamCommand=>new RelayCommand(
()=>CreateExam(名称、日期),
()=>!string.IsNullOrEmpty(\u name)
);
但是,我只是安装了MVVMLightLibs,以替换手动复制的代码(并删除了我的
RelayCommand
)。现在,
CreateExamCommand
CanExecute
方法被破坏

我将一些
WriteLine
s放在
CanExecute
中,它似乎只在首次加载视图(模型)时运行


如何修复此问题?

这取决于您使用的MVVMLight的RelayCommand版本

如果您具有名称空间“GalaSoft.MvvmLight.CommandWpf”,那么您的命令将使用CommandManager对象,并在每次击键或鼠标单击后自动刷新CanExecute


如果您有“GalaSoft.MvvmLight.Command”,那么您必须手动触发CanExecute-在Name属性的setter中添加
CreateExamCommand.RaiseCanecuteChanged()

实际上,我刚开始使用PropertyChanged.Fody。但是这个答案显然是正确的和相关的。使用Fody.PropertyChanged的少数缺点之一是没有setter可以用作触发器,而不是说这一定是刷新命令的正确位置。我在博客中讨论了另一种方法-