在建立 DelegateCommand 物件的時候,可以使用兩種建構式。其中,
DelegateCommand(Action executeMethod)
只用來定義該命令要執行的內容,而這個 DelegateCommand(Action executeMethod, Func<bool> canExecuteMethod)
則可以定義何時這個命令可以使用。 //
// 摘要:
// Creates a new instance of Prism.Commands.DelegateCommand with the System.Action
// to invoke on execution.
//
// 參數:
// executeMethod:
// The System.Action to invoke when System.Windows.Input.ICommand.Execute(System.Object)
// is called.
public DelegateCommand(Action executeMethod);
//
// 摘要:
// Creates a new instance of Prism.Commands.DelegateCommand with the System.Action
// to invoke on execution and a Func to query for determining if the command can
// execute.
//
// 參數:
// executeMethod:
// The System.Action to invoke when System.Windows.Input.ICommand.Execute(System.Object)
// is called.
//
// canExecuteMethod:
// The System.Func`1 to invoke when System.Windows.Input.ICommand.CanExecute(System.Object)
// is called
public DelegateCommand(Action executeMethod, Func<bool> canExecuteMethod);
在這裡,首先定義一個 DelegateCommand,並且產生兩個委派方法,而在
canExecuteMethod
委派方法,僅回傳 是否啟用
。
這個屬性
是否啟用
當有值設定的時候,會去呼叫 切換到新頁面Command.RaiseCanExecuteChanged()
,也就是會同步更新按鈕是否可以使用。 #region 是否啟用
private bool _是否啟用=true;
/// <summary>
/// 是否啟用
/// </summary>
public bool 是否啟用
{
get { return this._是否啟用; }
set { this.SetProperty(ref this._是否啟用, value); 切換到新頁面Command.RaiseCanExecuteChanged(); }
}
#endregion
private readonly INavigationService _navigationService;
public DelegateCommand 切換到新頁面Command { get; private set; }
public MainPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
切換到新頁面Command = new DelegateCommand(切換到新頁面, Can切換到新頁面);
}
private bool Can切換到新頁面()
{
return 是否啟用;
}
private void 切換到新頁面()
{
_navigationService.NavigateAsync("NewPage");
}