切换到 MVVMLight 时的 CanExecute 问题

CanExecute problem when switching to MVVMLight

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

XAML

<UniformGrid Columns="2" DockPanel.Dock="Bottom">
    <Button Content="Cancel" Command="{Binding CancelCommand}" HorizontalAlignment="Left"/>
    <Button Content="Create" Command="{Binding CreateExamCommand}" HorizontalAlignment="Right"/>
</UniformGrid>

<StackPanel VerticalAlignment="Center">
    <TextBox Name="textBox" Tag="Exam Name" 
             Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />

Csharp

public RelayCommand CreateExamCommand => new RelayCommand(
  () => CreateExam(Name, Date),
  () => !string.IsNullOrEmpty(_name)
);

但是,我刚刚安装了 MVVMLightLibs,以替换我手动复制的代码(并删除了我的 RelayCommand 版本)。现在 CreateExamCommandCanExecute 方法被破坏了。

我在 CanExecute 中放了一些 WriteLine,当第一次加载视图(模型)时它似乎只有 运行。

我该如何解决这个问题?

这取决于您使用的是哪个版本的 MVVMLight 的 RelayCommand。

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

如果您有 "GalaSoft.MvvmLight.Command",那么您必须手动触发 CanExecute - 在您的姓名 属性.

的 setter 中添加 CreateExamCommand.RaiseCanExecuteChanged()