如果您在使用MVVM并使用命令,您会经常在ViewModel上看到由私有RelayCommand或DelegateCommand字段支持的ICommand属性,就像本示例中的原始MVVM文章MSDN:简化WPF MVVM中的RelayCommand/DelegateCommand ViewModels
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#或垃圾收集知道这可能会导致问题,如在某些情况下产生过多的垃圾。这会造成任何问题吗?
如果你真的担心你的内存使用情况,那么仅仅实例化将要使用的命令是否合理?例如,如果您有一台虚拟机显示3条命令,并且只有一条命令被使用,则放弃其余部分。如果您正在使用所有虚拟机命令(您应该是),那么您的延迟加载系统将使用更多的内存和更多的处理器时间,这首先破坏了优化的目的,尤其是对于嵌入式系统。 – 2011-03-29 16:55:19