2015-12-14 4 views
3

Спасибо заранее!WPF PRISM 6 DelegateComand ObservesCanExecute

Как использовать ObservesCanExecute в DelegateCommand PRISM 6?

public partial class UserAccountsViewModel: INotifyPropertyChanged 
{ 
    public DelegateCommand InsertCommand { get; private set; } 
    public DelegateCommand UpdateCommand { get; private set; } 
    public DelegateCommand DeleteCommand { get; private set; } 

    public UserAccount SelectedUserAccount 
    { 
     get; 
     set 
     { 
      //notify property changed stuff 
     } 
    } 

    public UserAccountsViewModel() 
    { 
     InitCommands(); 
    } 

    private void InitCommands() 
    { 
     InsertCommand = new DelegateCommand(Insert, CanInsert); 
     UpdateCommand = new DelegateCommand(Update,CanUpdate).ObservesCanExecute(); // ??? 
     DeleteCommand = new DelegateCommand(Delete,CanDelete); 
    } 

    //---------------------------------------------------------- 

    private void Update() 
    { 
     //... 
    } 

    private bool CanUpdate() 
    { 
     return SelectedUserAccount != null; 
    } 

    //..... 
} 

К сожалению, я не знаком с выражениями в C#. Кроме того, я думал, что это будет полезно для других.

ответ

7

ObservesCanExecute() работает «в основном как» canExecuteMethod параметр DelegateCommand(Action executeMethod, Func<bool> canExecuteMethod).

Однако, если у вас есть логического свойства вместо метода, вам не нужно определить canExecuteMethod с ObservesCanExecute.

В вашем примере, предположим, что CanUpdate не метод, просто предположим, что это Логическое свойство.

Затем вы можете изменить код ObservesCanExecute(() => CanUpdate) и DelegateCommand будет выполняться, только если CanUpdate логического свойства имеет значение true (нет необходимости определить метод).

ObservesCanExecute как «ярлык» над свойством вместо того, чтобы определять способ и передать его в параметр canExecuteMethod конструктора DelegateCommand.

+0

Есть ли причина не просто использовать лямбду здесь? Единственное, что я могу думать, это то, что есть некоторое кэширование выражения resolves. – Gusdor

+0

@Gusdor, как сказал alphe, потому что ObserveCanExecute свободно заменяет [CanExecute] (https://msdn.microsoft.com/en-us/library/ff654646.aspx?cs-save-lang=1&cs-lang=csharp # code-snippet-1) Boolean method; поэтому он должен возвращать логическое значение. –

Смежные вопросы