如果你正在使用MVVM并使用命令,你经常会看到ViewModel上的ICommand属性由私有的RelayCommand或DelegateCommand字段支持,就像这个例子一样,来自于MSDN上关于原始MVVM文章:
RelayCommand _saveCommand;
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(param => this.Save(),
param => this.CanSave );
}
return _saveCommand;
}
}
然而,这样做会产生很多冗余代码,导致设置新命令变得很繁琐(我与一些老练的WinForms开发人员合作,他们对所有这些打字都感到反感)。因此,我想简化它并进行了一些研究。我在get{}块的第一行设置了断点,发现它只在应用程序首次加载时被触发 - 我稍后可以随意启动多个命令,这个断点永远不会被触发。因此,我想简化这个过程以从我的ViewModels中删除一些代码,并注意到以下代码可以起到同样的作用:
public ICommand SaveCommand
{
get
{
return new RelayCommand(param => this.Save(), param => this.CanSave );
}
}
然而,我对C#或垃圾回收器的了解不足,无法确定这是否会导致问题,例如在某些情况下生成过多的垃圾。这会造成任何问题吗?