本章我们来讲述:WPF中命令(Command)的绑定和使用的简单示例。
首先我们要先定义一个类,并继承ICommand;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace ICommandTest
{
public class RelayCommand : ICommand
{
private readonly Action<object> m_execute;
private readonly Predicate<object> m_canExecute;
public RelayCommand(Action<object> execute)
{
this.m_execute = execute;
}
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
this.m_execute = execute;
this.m_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
if (m_canExecute == null)
return true;
return m_canExecute(parameter);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
this.m_execute(parameter);
}
}
}
然后在界面上绑定命令
<Window x:Class="ICommandTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBox x:Name="txt" Text="Command 命令绑定测试……" Width="220" Height="30" FontSize="15"/>
<Button x:Name="bnt1" Margin="10" Content="Button1" Width="120" Height="45" HorizontalAlignment="Center" VerticalAlignment="Center"
Command="{Binding ClickCommand}" CommandParameter="新明开销"/>
<Button x:Name="bnt2" Margin="10" Content="Button2" Width="120" Height="45" HorizontalAlignment="Center" VerticalAlignment="Center"
Command="{Binding ClickCommand2}" CommandParameter="{Binding ElementName=txt}"/>
</StackPanel>
</Window>
后台上下文数据绑定ViewModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace ICommandTest
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}
}
}
ViewModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
namespace ICommandTest
{
public class MainWindowViewModel
{
public RelayCommand ClickCommand
{
get
{
return new RelayCommand((arg) =>
{
string context = arg as string;
MessageBox.Show("Click " + context);
});
}
}
public RelayCommand ClickCommand2
{
get
{
return new RelayCommand((arg) =>
{
TextBox context = arg as TextBox;
MessageBox.Show("Click " + context.Text);
});
}
}
}
}
这样就简单实现了命令的绑定和使用,运行测试结果图