Создайте новый объект ICommand в ViewModel - PullRequest
1 голос
/ 09 сентября 2011

Оба объекта ICommand связаны с ViewModel.

Первый подход, похоже, часто используется.

Но второй сохраняет некоторые строки кода, но не создает каждый раз новыйОбъект ICommand при обновлении Binding, так что это пустая трата ресурсов?!

private LightCommand _deleteDocumentCommand;
        public LightCommand DeleteDocumentCommand
        {
            get { return _deleteDocumentCommand ?? (_deleteDocumentCommand = new LightCommand(() => DeleteDocument(), () => CanDeleteDocument)); }
        }

        public LightCommand DeleteDocumentCommand
        {
            get { return new LightCommand(() => DeleteDocument(), () => CanDeleteDocument); }
        }

Ответы [ 3 ]

1 голос
/ 09 сентября 2011

Да, ваш 2-й метод создает новую команду каждый раз, когда на нее ссылаются, но я также нахожу, что ваш 1-й метод довольно труден для чтения.

Мой предпочтительный способ сделать команду во ViewModel -

private LightCommand _deleteDocumentCommand;
public LightCommand DeleteDocumentCommand
{
    get 
    {
        if (_deleteDocumentCommand == null)
        {
            _deleteDocumentCommand = new LightCommand(
                () => DeleteDocument(), () => CanDeleteDocument);
        }

        return _deleteDocumentCommand;
    }
}

Это может быть больше строк кода, но его легко прочитать и понять. Кроме того, обычно все мои общедоступные свойства / команды создаются макросами и выгружаются в область #region Properties, которая остается свернутой в течение всего времени работы с ViewModel, поэтому мне не нужно прокручивать страницы методов get / set.

0 голосов
/ 09 сентября 2011

Я предполагаю, что вы ищете подтверждение, и это правильно:

Каждый раз, когда привязка обновляется (или вызывается команда), создается новый объект.Это выглядит как пустая трата ресурсов.

0 голосов
/ 09 сентября 2011

да, будет. Вам лучше один раз создать его экземпляр, чтобы у вас было что-то вроде этого:

LightCommand DeleteCommand { get;  set;}

и затем в нашем экземпляре виртуальной машины вы назначаете его. Или вы можете использовать свой первый пример.

...