切换到 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
版本)。现在 CreateExamCommand
的 CanExecute
方法被破坏了。
我在 CanExecute
中放了一些 WriteLine
,当第一次加载视图(模型)时它似乎只有 运行。
我该如何解决这个问题?
这取决于您使用的是哪个版本的 MVVMLight 的 RelayCommand。
如果您有命名空间 "GalaSoft.MvvmLight.CommandWpf",那么您的命令将使用 CommandManager 对象并在每次击键或单击鼠标后自动刷新 CanExecute。
如果您有 "GalaSoft.MvvmLight.Command",那么您必须手动触发 CanExecute - 在您的姓名 属性.
的 setter 中添加 CreateExamCommand.RaiseCanExecuteChanged()
我一直在使用从一篇文章 (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
版本)。现在 CreateExamCommand
的 CanExecute
方法被破坏了。
我在 CanExecute
中放了一些 WriteLine
,当第一次加载视图(模型)时它似乎只有 运行。
我该如何解决这个问题?
这取决于您使用的是哪个版本的 MVVMLight 的 RelayCommand。
如果您有命名空间 "GalaSoft.MvvmLight.CommandWpf",那么您的命令将使用 CommandManager 对象并在每次击键或单击鼠标后自动刷新 CanExecute。
如果您有 "GalaSoft.MvvmLight.Command",那么您必须手动触发 CanExecute - 在您的姓名 属性.
的 setter 中添加CreateExamCommand.RaiseCanExecuteChanged()