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可以用!

你可能感兴趣的:(command)