ICommand分享学习

优点:逻辑代码和界面设计解耦
缺点:不是每个控件都有Command属性
MSDN源码:

public interface ICommand
{
event EventHandler CanExecuteChanged;
bool CanExecute(object parameter);
void Execute(object parameter);
}


要想实现自定义ICommand就必须实现一个事件和两个方法;
以下是我自己实现的:
1.定义Model类:

public class CustomController : ICommand
    {
        //  CanExecute():判断是否继续执行操作。
       //Execute():执行操作的内容。
       //CanExecuteChanged:当出现影响是否应执行该命令的更改时发生。

        private bool canExe;
        public CustomController(bool canexe)
        {
            this.canExe = canexe;
        }

        public bool CanExecute(object parameter)
        {
            if (canExe)
            {
                return true;
            }
            return false;
        }

        public event EventHandler CanExecuteChanged;

        public void Execute(object parameter)
        {
            if (parameter != null)
            {
                MessageBox.Show(parameter.ToString());
             }
            else
            {
                MessageBox.Show("未设置CommandParameter");

            }
        }
    }
                

2.定义ViewModel类:

public class CustomControllerViewModel
{
public ICommand CustomCommand { get; set; } //第一个Button命令
public ICommand CustomCommandTrue { get; set; } //第二个Button命令

public CustomControllerViewModel()
{
CustomCommand = new CustomController(false);
CustomCommandTrue = new CustomController(true);
}
}

3.界面设计MainPage.xaml:

<Button Content="第一个"
Height="96"
HorizontalAlignment="Left"
Command="{Binding CustomCommand}"
CommandParameter="第一个Command"
Margin="-12,433,0,0"
Name="button1"
VerticalAlignment="Top"
Width="200" />
<Button Command="{Binding CustomCommandTrue}"
CommandParameter="第二个Command"
Content="第二个"
Height="102"
HorizontalAlignment="Left"

Name="button2"
VerticalAlignment="Top"
Width="200"
Margin="172,430,0,0" />

4.后台代码MainPage.xaml.cs

CustomControllerViewModel custom = new CustomControllerViewModel();
this.DataContext = custom;


大功告成,这个时候,第一个Button不可用,第二个Button可以用!

原文地址:https://www.cnblogs.com/Yukang1989/p/2854538.html