为什么没有调用RelayCommand?

时间:2016-09-08 16:05:56

标签: c# wpf mvvm relaycommand

我的ViewModel中有以下内容:

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

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

XAML:

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

我看到ViewModel构造函数已初始化,因此绑定应该在那里。但是当我点击关闭按钮时,没有任何反应。我有什么想法吗?

1 个答案:

答案 0 :(得分:4)

从字段定义更改为属性定义:

public RelayCommand CloseCommand { get; set; }

<强>为什么:

字段通常是不可绑定的。查看Binding Sources Overview

  

您可以绑定到公共属性,子属性以及   任何公共语言运行时(CLR)对象的索引器。绑定   引擎使用CLR反射来获取属性的值。   或者,实现ICustomTypeDescriptor或具有的对象   注册的TypeDescriptionProvider也可以使用绑定引擎。

     

有关如何实现可以充当的类的更多信息   绑定源,请参阅为绑定源实现类   在本主题后面。

在“其他特征”部分下:

  

您无法绑定到公共字段。