Где установить команду? - PullRequest
0 голосов
/ 20 июня 2019

Я видел два разных способа определения команд

public DelegateCommand OpenCommand {get;set;}

public ViewModelConstructor()
{
   OpenCommand = new DelegateCommand(OpenMethod);
}

Когда другие люди решают установить его напрямую, так как команда редко меняется.

public DelegateCommand => new DelegateCommand(OpenMethod);

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

Каковы соглашения о том, где определять объекты, такие как команды, которые не изменяются во время выполнения?

1 Ответ

1 голос
/ 20 июня 2019

Как упоминает @ 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...