1

两个 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); }
        }
4

3 回答 3

1

是的,您的第二种方法在每次引用命令时都会创建一个新命令,但我也发现您的第一种方法很难阅读。

我在 ViewModel 中创建命令的首选方式是

private LightCommand _deleteDocumentCommand;
public LightCommand DeleteDocumentCommand
{
    get 
    {
        if (_deleteDocumentCommand == null)
        {
            _deleteDocumentCommand = new LightCommand(
                () => DeleteDocument(), () => CanDeleteDocument);
        }

        return _deleteDocumentCommand;
    }
}

它可能是更多的代码行,但它很容易阅读和理解。此外,通常我所有的公共属性/命令都是由宏生成并转储到一个#region Properties在我使用 ViewModel 的整个过程中保持折叠的区域中,因此我不必滚动获取/设置方法的页面。

于 2011-09-09T16:20:49.640 回答
0

是的,它会的。你最好实例化一次,这样你就有了这样的东西:

LightCommand DeleteCommand { get;  set;}

然后在我们的虚拟机实例中分配给它。或者你可以使用你的第一个例子。

于 2011-09-09T16:08:57.567 回答
0

我假设您正在寻找验证,这是正确的:

每次刷新绑定(或调用命令)时,都会实例化一个新对象。这显然是对资源的浪费。

于 2011-09-09T16:10:20.257 回答