命令绑定不起作用

Dar*_*ung 1 c# wpf mvvm

我正在使用MVVM为大学开发我的第一个WPF应用程序。尽管我已经按照先前使用的成功步骤进行了操作,但我无法获得这种特定的约束。

我有以下xaml代码段:

    <Button Command="{Binding GetTicketsCommand}" Canvas.Left="50" Canvas.Top="202"    Content="Refresh List" Height="25" Width="137" />
Run Code Online (Sandbox Code Playgroud)

该视图将VM初始化为:

public JobListView()
    {
        InitializeComponent();
        viewModel = new JobListViewModel(this);
        this.DataContext = viewModel;
    }
Run Code Online (Sandbox Code Playgroud)

该视图模型有一个名为GetTicketsCommand的命令,该按钮绑定到该命令,但是当我单击该按钮时,不会调用命令Execute或CanExecute方法。我创建的命令正在VM构造函数中实例化。

有任何想法吗?

编辑:

命令类如下:

public class GetTicketsCommand  : ICommand
{
    private readonly JobListViewModel viewModel;

    public GetTicketsCommand(JobListViewModel viewModel)
    {
        this.viewModel = viewModel;     
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        viewModel.GetTickets();
    }

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

在viewmodel中,我只需在构造函数中创建它的一个实例:

public JobListViewModel()
    {
        GetTicketsCommand = new GetTicketsCommand(this);
        dataAccess = new DataLayerClient();
    }
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 5

绑定仅适用于属性。确保GetTicketsCommand视图模型中的命令是一个属性:

public ICommand GetTicketsCommand { get; set; }
Run Code Online (Sandbox Code Playgroud)

而不是字段:

public ICommand GetTicketsCommand;
Run Code Online (Sandbox Code Playgroud)