Как упоминает @ vasily.sib, второй метод будет создавать новый экземпляр при каждом вызове.
Я считаю, что второй метод на самом деле вызывает проблемы с тем, как RaiseCanExecuteChanged
влияет на представления из-за этого.Рассмотрим следующую ViewModel:
public class ViewModel
{
private bool CanEx { get; set; }
public DelegateCommand XCommand => new DelegateCommand(X, Can);
public DelegateCommand YCommand { get; set; }
public DelegateCommand SwitchCommand { get; set; }
public ViewModel()
{
CanEx = true;
YCommand = new DelegateCommand(Y, Can);
SwitchCommand = new DelegateCommand(Switch);
}
private void X(object obj) => System.Diagnostics.Debug.WriteLine("X");
private void Y(object obj) => System.Diagnostics.Debug.WriteLine("Y");
private bool Can(object obj) => CanEx;
private void Switch(object obj)
{
CanEx = !CanEx;
XCommand.RaiseCanExecuteChanged();
YCommand.RaiseCanExecuteChanged();
}
}
Когда я создаю View из этой ViewModel, с Button
s для каждой команды, Button
для XCommand
не будет отображаться отключенным при запуске SwitchCommand
.
Кажется, это как-то связано с тем фактом, что в момент вызова RaiseCanExecuteChanged()
он равен 'null.