我是C#的新手,我需要为一个按钮创建简单的绑定命令。我过去几个小时一直在阅读很多文章,但这让我更加困惑。
我有一个WPF窗口(让我们说Window1),我有按钮" AddCustomer"。为它创建命令的最简单方法是什么? (简单来说,我的意思很容易理解)
在每篇文章中,他们都采用不同的方式。我需要你告诉我如何在xaml中绑定它,更详细更好...就像我说的,我是新的。
感谢您的帮助。
答案 0 :(得分:2)
是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>
答案 1 :(得分:1)
以下是我的看法,以下是“最简单的”,因为您正在利用Prism库,因此您编写的代码量很小。如果你还没有使用它,可以使用nuget管理器将Prism添加到你的项目中......
xaml:
<Button Command="{Binding AddCustomerCommand}" Content="Add Customer"/>
在你的viewmodel中: (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;
}