c# - 切换到 MVVMLight 时出现 CanExecute 问题
问题描述
我一直在使用RelayCommand
从一篇文章(可能是这篇文章)中复制的内容,并且CreateExamCommand
下面的工作正常,与CanExecute
“名称”是否为空有关。
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}" />
夏普
public RelayCommand CreateExamCommand => new RelayCommand(
() => CreateExam(Name, Date),
() => !string.IsNullOrEmpty(_name)
);
但是,我刚刚安装了 MVVMLightLibs,以替换我手动复制的代码(并删除了我的RelayCommand
. 现在的CanExecute
方法CreateExamCommand
被打破了。
我WriteLine
在里面放了一些 s CanExecute
,它似乎只在第一次加载视图(模型)时运行。
我该如何解决?
解决方案
这取决于您使用的 MVVMLight 的 RelayCommand 版本。
如果您有命名空间“GalaSoft.MvvmLight.CommandWpf”,那么您的命令将使用 CommandManager 对象并在每次击键或鼠标单击后自动刷新 CanExecute。
如果您有“GalaSoft.MvvmLight.Command”,那么您必须手动触发 CanExecute - 添加CreateExamCommand.RaiseCanExecuteChanged()
您的 Name 属性的设置器。