2012-02-03 3 views
2

Я пытался найти хороший аккуратный и лаконичный способ объявить RelayCommands в моих моделях ViewModels.Лучший/самый простой способ объявить RelayCommands

Лучшее, что я могу придумать это:

public class MyViewModel 
{ 
    public ICommand StopCommand { get; private set; } 

    public MyViewModel() 
    { 
     StopCommand = new RelayCommand(OnStop); 
    } 

    private OnStop(object sender) 
    { 
     //hammertime 
    } 

}

То, что я действительно хотел бы сделать это удалить две декларации этап/строительство, что-то вроде:

public class MyViewModel 
{ 
    public readonly ICommand StopCommand = new RelayCommand(OnStop); 

    private OnStop(object sender) 
    { 
     //hammertime 
    } 
} 

Однако это не скомпилировано с

ошибка CS0236: Поле инициализатор не может ссылаться на нестатическая поле, метод или свойство «MyViewModel.OnStop (объект)»

Он там аккуратнее/«стандарт» способ, которым люди используют?

+2

Я использовал первый формат, который вы указали совсем немного, и он отлично подходит для меня. – RQDQ

ответ

3

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

Кроме того, если вы используете WPF, привязка не работает с полями, так что даже если вы можете получить второй подход к компиляции, он не будет подключаться к вашему пользовательскому интерфейсу.

0

я использовал что-то вроде:

public ICommand StopCommand 
{ 
    get{return new RelayCommand(OnStop);} 
} 
+0

Не рекомендуется ли использовать другое частное поле, которое и проверяет наличие null? –

1

Один из вариантов отказаться командным, который имеет это ограничение, и использовать другой механизм, например, действий, предусмотренных Caliburn.Micro. Тогда вам просто нужно ваше мнение модели глагол:

public void Save() 
{ 
} 

<Button x:Name="Save">Save</Button> 
Смежные вопросы