18

使用 Josh Smith 的RelayCommand时,我见过的大多数示例都使用延迟初始化,例如:

public class ViewModel
{
    private ICommand myCommand;

    public ICommand MyCommand
    {
        get
        {
            if (myCommand == null)
            {
                myCommand = new RelayCommand(p => DoSomething() );
            }

            return myCommand;
        }
    }
    // ... stuff ...

}

而不是在构造函数中创建 RelayCommand,如下所示:

public class ViewModel
{
    public ViewModel()
    {
            MyCommand = new RelayCommand(p => DoSomething());
    }

    public ICommand MyCommand
    {
        get;
        private set;

    }

    // ... stuff ...
}

在这里使用延迟初始化有什么好处?在设置绑定时它必须调用 get 属性,所以我看不出有理由使用这个方法而不是在构造函数中进行设置。

我在这里错过了什么吗?

4

1 回答 1

15

实际上,WPF 和 Silverlight 每次绑定只会获取一次中继命令,因此您根本不需要存储支持字段:

public ICommand MyCommand
{
    get
    {
        return new RelayCommand(p => DoSomething());
    }
}

因此,尽管按照您的建议在 .ctor 中创建它并没有错,但几乎没有理由这样做。

于 2010-09-22T13:55:49.997 回答