2016-09-08 9 views
0

У меня есть следующие в моем ViewModel:Почему не звонит RelayCommand?

public MyViewModel() { 
    CloseCommend = new RelayCommand(closeWindow); 
} 

public RelayCommand CloseCommend; 
private void closeWindow() { 
    Application.Current.MainWindow.Close(); 
} 

XAML:

<Button ... Command="{Binding CloseCommend}"/> 

Я вижу конструктор ViewModel инициализируется таким образом, связывание должно быть. Но когда я нажимаю кнопку закрытия, ничего не происходит. Любые идеи, что я делаю неправильно?

ответ

4

Изменение из определения поля в определении свойства:

public RelayCommand CloseCommand { get; set; } 

Почему:

поля, как правило, не Привязываемое. Проверьте (CLR) объект Binding Sources Overview

Вы можете связываться с общественными свойствами, подсвойств, а также индексаторов любого общеязыковой среды выполнения. Механизм привязки использует отражение CLR для получения значений свойств. В качестве альтернативы, объекты, реализующие ICustomTypeDescriptor или имеющие зарегистрированный тип TypeDescriptionProvider, также работают с механизмом привязки.

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

Под "Другие характеристики" раздела:

Вы не можете связываться с общественными полями.