wpf button使用Binding绑定Click事件
时间: 2023-07-11 17:33:30 浏览: 339
在 WPF 中,可以使用 Binding 绑定 Click 事件,但需要使用一个特殊的附加属性来实现。具体步骤如下:
1. 在 XAML 中定义 Button 控件,并使用 Binding 绑定 Click 事件,例如:
```
<Button Content="Click Me" local:ButtonClick.Command="{Binding MyCommand}" />
```
其中,ButtonClick 是一个自定义附加属性,可以在代码中定义,MyCommand 是一个 ICommand 类型的属性,表示要执行的命令。
2. 在代码中定义 ButtonClick 附加属性,并在其 PropertyChangedCallback 中注册 Click 事件的处理方法,例如:
```
public static class ButtonClick
{
public static readonly DependencyProperty CommandProperty =
DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(ButtonClick),
new FrameworkPropertyMetadata(null, CommandChanged));
public static ICommand GetCommand(Button button)
{
return (ICommand)button.GetValue(CommandProperty);
}
public static void SetCommand(Button button, ICommand value)
{
button.SetValue(CommandProperty, value);
}
private static void CommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is Button button)
{
button.Click -= Button_Click;
if (e.NewValue is ICommand command)
{
button.Click += Button_Click;
}
}
}
private static void Button_Click(object sender, RoutedEventArgs e)
{
if (sender is Button button)
{
ICommand command = GetCommand(button);
if (command != null && command.CanExecute(button.CommandParameter))
{
command.Execute(button.CommandParameter);
}
}
}
}
```
其中,CommandProperty 是 ButtonClick 附加属性的依赖属性,GetCommand 和 SetCommand 方法用于获取和设置 Command 属性的值,CommandChanged 方法在 Command 属性值发生变化时注册或取消注册 Click 事件的处理方法,Button_Click 方法是 Click 事件的处理方法,用于执行绑定的命令。
注意,使用这种方式绑定 Click 事件时,Button 控件的 Click 事件不会触发,而是会触发 ButtonClick 附加属性的处理方法。
阅读全文