【发布时间】:2010-06-24 17:03:53
【问题描述】:
如果您正在执行 MVVM 并使用命令,您会经常在 ViewModel 上看到由私有 RelayCommand 或 DelegateCommand 字段支持的 ICommand 属性,例如 MSDN 上的原始 MVVM 文章中的这个示例:
RelayCommand _saveCommand;
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(param => this.Save(),
param => this.CanSave );
}
return _saveCommand;
}
}
但是,这很混乱,并且使设置新命令相当乏味(我与一些对所有这些输入都犹豫不决的资深 WinForms 开发人员一起工作)。所以我想简化它并挖掘一点。我在 get{} 块的第一行设置了一个断点,发现它只在我的应用程序第一次加载时才被命中——我以后可以根据需要触发任意数量的命令,而这个断点永远不会被命中——所以我想要简化它以消除我的 ViewModel 中的一些混乱,并注意到以下代码的工作方式相同:
public ICommand SaveCommand
{
get
{
return new RelayCommand(param => this.Save(), param => this.CanSave );
}
}
但是,我对 C# 或垃圾收集器的了解还不够,不知道这是否会导致问题,例如在某些情况下会产生过多的垃圾。这会带来什么问题吗?
【问题讨论】:
标签: c# wpf mvvm relaycommand delegatecommand