在ViewModel构造函数中创建ICommands有什么好处吗?

时间:2018-08-14 07:53:33

标签: xamarin xamarin.forms

到目前为止,我已经看到了两个不同的建议。我不确定它们是否相同,或者更简单,更好用。

在构造函数中创建

public SessionViewModel()   
{   
    LikeCommand = new Command(ApplyLike);   
}  
public ICommand LikeCommand {get;private set;}  

在ViewModel主体中创建

public SessionViewModel()   
{   
}

private ICommand likeCommand;
public ICommand LikeCommand => likeCommand ?? (likeCommand = new Command(() => ApplyLike()));

第二种方法似乎更复杂,但是它具有优势吗?

2 个答案:

答案 0 :(得分:1)

首选另一种方式:

  func applicationWillEnterForeground(_ application: UIApplication) {

       // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
       let mainStoryboard: UIStoryboard = UIStoryboard(name:"Main",bundle:Bundle.main)
       let pinViewConroller: PINViewController = mainStoryboard.instantiateViewController(withIdentifier: "PINViewController") as! PINViewController
       self.window?.rootViewController.present(pinViewConroller, animated: false, completion: nil)

    }

它与上面的两个示例都不同,因为它是public ICommand LikeCommand { get; } public SessionViewModel() { LikeCommand = new Command(ApplyLike); } 。这样read only auto property不可变(不可更改),换句话说,这将使混乱代码的可能性降低。我发现它更容易阅读和理解,因为您可以期望初始化命令的唯一位置是构造函数。

答案 1 :(得分:1)

相同的...东西:) 尝试:

params = {'text.usetex': True,
          'font.size': 11,
          'font.family': 'times',
          'text.latex.unicode': True,
          }
plt.rcParams.update(params)

这还使您可以进行诸如“刷新所有命令状态”之类的交互,并且可以更好地通用访问所有命令。

重要说明:这是原型代码,不能有效,因为它应该包含更多的检查内容,等等:)