两个ICommand对象都绑定到ViewModel。
第一种方法似乎经常被使用。
但是第二个保存了一些代码行,但是当刷新Binding时它不会每次都创建一个新的ICommand对象,因此浪费资源?!
private LightCommand _deleteDocumentCommand;
public LightCommand DeleteDocumentCommand
{
get { return _deleteDocumentCommand ?? (_deleteDocumentCommand = new LightCommand(() => DeleteDocument(), () => CanDeleteDocument)); }
}
public LightCommand DeleteDocumentCommand
{
get { return new LightCommand(() => DeleteDocument(), () => CanDeleteDocument); }
}
答案 0 :(得分:1)
是的,你的第二种方法在每次引用命令时都会创建一个新命令,但我也发现你的第一种方法很难阅读。
我在ViewModel中创建命令的首选方法是
private LightCommand _deleteDocumentCommand;
public LightCommand DeleteDocumentCommand
{
get
{
if (_deleteDocumentCommand == null)
{
_deleteDocumentCommand = new LightCommand(
() => DeleteDocument(), () => CanDeleteDocument);
}
return _deleteDocumentCommand;
}
}
它可能是更多代码行,但它易于阅读和理解。此外,通常我的所有公共属性/命令都是由宏生成并转储到#region Properties
区域,在我使用ViewModel的整个过程中保持折叠,所以我不必滚动浏览get / set方法的页面
答案 1 :(得分:0)
LightCommand DeleteCommand { get; set;}
然后在我们分配给它的VM实例中。或者你可以使用你的第一个例子。
答案 2 :(得分:0)
我假设您正在寻找验证,这是正确的:
每次刷新Binding(或调用命令)时,都会实例化一个新对象。这似乎是对资源的明显浪费。