我正在使用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)
绑定仅适用于属性。确保GetTicketsCommand视图模型中的命令是一个属性:
public ICommand GetTicketsCommand { get; set; }
Run Code Online (Sandbox Code Playgroud)
而不是字段:
public ICommand GetTicketsCommand;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6015 次 |
| 最近记录: |