我正在尝试利用命令创建一个 WPF 应用程序,但我遇到了启用菜单按钮的命令的问题。我正在做一些简单的验证,在这种情况下,“保存”按钮被禁用,直到用户创建新文档或加载现有文档。
假设我的视图模型看起来像这样,其中对象 ViewModel 继承了 INotifyPropertyChanged:
public ViewModel()
{
New = new RelayCommand( OnNew, CanNew );
Save = new RelayCommand( OnSave, CanSave );
}
ICommand m_cmdNew;
public ICommand New
{
get { return m_cmdNew; }
set
{
m_cmdNew = value;
OnPropertyChanged( "New" );
}
}
void OnNew( object param )
{
bCanSave = true;
// I read that this could resolve my problem.
CommandManager.InvalidateRequerySuggested();
}
bool CanNew( object param )
{
return true;
}
假设我也在为“保存”命令做同样的事情,唯一的例外是“CanSave”看起来像这样:
bool CanSave( object param )
{
return bCanSave;
}
我的 Xaml:
<Menu>
<MenuItem Header="Text">
<MenuItem Header="New" Command="{Binding New}"/>
<MenuItem Header="Save" Command="{Binding Save}"/>
</MenuItem>
</Menu>
我遇到的问题是在我更改变量“bCanSave”后永远不会调用 CanSave 方法。我怎样才能做到这一点?我知道我可以简单地创建一个属性并使用 INotifyPropertyChanged 和 XAML 绑定,我可以简单地切换 IsEnabled 属性,但是从我阅读的内容来看,这似乎是很多工作,命令已经这样做了。