代码之家  ›  专栏  ›  技术社区  ›  Wilka

为什么RelayCommands通常使用延迟初始化?

  •  13
  • Wilka  · 技术社区  · 14 年前

    使用乔希·史密斯的 RelayCommand ,我看到的大多数示例都使用延迟初始化,例如:

    public class ViewModel
    {
        private ICommand myCommand;
    
        public ICommand MyCommand
        {
            get
            {
                if (myCommand == null)
                {
                    myCommand = new RelayCommand(p => DoSomething() );
                }
    
                return myCommand;
            }
        }
        // ... stuff ...
    
    }
    

    public class ViewModel
    {
        public ViewModel()
        {
                MyCommand = new RelayCommand(p => DoSomething());
        }
    
        public ICommand MyCommand
        {
            get;
            private set;
    
        }
    
        // ... stuff ...
    }
    

    在这里使用延迟初始化有什么好处?在设置绑定时,它必须调用get属性,所以我看不出在构造函数中使用此方法的原因。

    我是不是漏了什么?

    1 回复  |  直到 7 年前
        1
  •  16
  •   Judah Gabriel Himango    14 年前

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

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

    因此,尽管正如您所建议的那样,在.ctor中创建它没有什么错,但是没有什么理由这么做。