创建命令的简单方法
本文关键字:方法 简单 命令 创建 | 更新日期: 2023-09-27 17:52:17
我是c#的新手,我需要为一个按钮创建简单的绑定命令。在过去的几个小时里,我读了很多文章,但这只会让我更加困惑。
我有一个WPF窗口(让我们说Window1),我有按钮"AddCustomer"。为它创建命令的最简单方法是什么?(最简单的意思是容易理解)
在每篇文章中,他们的做法都不同。我需要你告诉我如何在xaml中绑定它,越详细越好…就像我说的,我是新来的。
谢谢你的帮助。
下面是WPF中命令的完整解决方案。
首先创建一个类来执行命令。
public class RelayCommand : ICommand
{
readonly Action<object> _execute;
readonly Predicate<object> _canExecute;
private Action<object> _action;
private bool _canSave;
public RelayCommand(Action<object> execute) : this(execute, null) { }
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null) throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
public RelayCommand(Action<object> action, bool CanSave)
{
this._action = action;
this._canSave = CanSave;
}
[DebuggerStepThrough]
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute(parameter);
}
public event EventHandler CanExecuteChanged
{
add
{
CommandManager.RequerySuggested += value;
}
remove
{
CommandManager.RequerySuggested -= value;
}
}
public void Execute(object parameter)
{
_execute(parameter);
}
}
下面是ViewModel
public FilterViewModel()
{
private RelayCommand _commandSave;
public ICommand Save
{
get {
return _commandSave ?? (_commandSave =
new RelayCommand(param => SaveMethod(param), CanSave));
}
}
private void SaveMethod
{
//code for save
}
private Predicate<object> CanSave
{
get { return o => true; }
}
}
,最后在XAML中使用命令。
<Button x:Name="btnSave" Content="Save" Command="{Binding Save}" CommandParameter="PASS-PARAMETER-HERE" ></Button>
这是我的看法,下面是"最简单的",因为您正在利用Prism库,因此您编写的代码量很小。使用nuget管理器将Prism添加到您的项目中,如果您还没有使用它…
xaml:<Button Command="{Binding AddCustomerCommand}" Content="Add Customer"/>
在视图模型中:(1)声明你的命令:
public ICommand AddCustomerCommand{ get; private set; }
(2)定义命令:
AddCustomerCommand= new DelegateCommand(AddCustomer);
(3)创建方法:
private void AddCustomer()
{
//do your logic here
}
扩展版:您可以从xaml:
传递一个参数<Button Command="{Binding AddCustomerCommand}" CommandParameter={Binding SelectedItem, ElementName=MySelectorThingy} Content="Add Customer"/>
请记住更改委托和方法的签名:
AddCustomerCommand= new DelegateCommand<WhateverMyTypeIs>(AddCustomer);
private void AddCustomer(WhateverMyTypeIs selectedThing)
{
//do your logic here
}
你也可以在DelegateCommand中定义按钮何时可用(CanExecute),如下所示:
public DelegateCommand AddCustomerCommand{ get; private set; }
AddCustomerCommand = new DelegateCommand(AddCustomer, AddCustomer_CanExecute);
然后定义决定是否执行的方法:
private bool AddCustomer_CanExecute()
{
if (DateTime.Now.DayOfWeek.Equals(DayOfWeek.Monday))
return true;
else
return false;
}