您的位置:首页 > 其它

MvvmLight(三)命名绑定Command

2015-09-04 12:35 435 查看

命名绑定Command

使用目的

在View层,点击一个Button,调用后台的一个方法(后台也许是ViewModel、Logic、Model,用后台代替)

关键词

RelayCommand—–通道,进行前台命名绑定后台方法

Execute—后台执行的方法

CanExecute—后台执行的方法是否可以执行

RaiseCanExecuteChanged—刷新后台执行的方法是否可以执行

如何使用

步骤1:建立后台的方法

private void ClickExecute()
{   //触发的方法,习惯上绑定要触发的方法后面 + Execute   }


步骤2:通道绑定后台方法

public RelayCommand ClickCommand { get; private set; }//习惯上要绑定的属性命名后面 + Command
ClickCommand = new RelayCommand(ClickExecute);//写在构造中


步骤3:通道绑定前台的命名



步骤4:后台方法是否触发

到了步骤3结束,实际已经可以了,light还提供一个条件,是指定你刚刚绑定的方法是否触发,你的需求可能是中途不能触发

举例说明:

1.我有个计数Count = 0;

2.写在ClickExecute方法中的是Count++;

3.我的目的是当Count>2的时候Count就不在++了,如下做:

private bool ClickCanExecute()
{  return count < 2;  }


新增限制条件的方法,在步骤2中改为(加在后面), 搞定了,后面的参数只能是bool,当Count>=2,Debug都不会跳入ClickExecute()中了,没有写CanExecute的时候默认为true

ClickCommand = new RelayCommand(ClickExecute, ClickCanExecute);

追加一:RaiseCanExecuteChanged

环境:

数据库中有A1-A10种数据,界面上有11个按钮,B1是连接数据库,B2-11是分别显示A1-A10,当想调用A1-A10其中任意一种数据时,需先Button1连接……

原先的Code:

方法CanShow返回bool判断是否可以显示,就是判断DB是否连接

Button2-11中先调用CanShow,是false直接return

改进遇到的问题

Button2-11Binding,在调用Execute的时候,后面加入CanShow来充当CanExecute。

运行时,CanShow肯定是false,还没有Click B1,B2-B11的按钮是未启用状态,灰色的,然后Click B1,仍然是灰色的

解决

在B1绑定的Execute中加一行即可,步骤4中的写法只能应付简单的环境

B2.RaiseCanExecuteChanged();


追加二:后台方法定义更美观

环境:

还是追加一的环境,后台的构造中,定义绑定按钮的方法例如下面这种,写了11条,累计起来,相当不美观

ClickCommand = new RelayCommand(ClickExecute);


解决:

ClickCommand不是一个属性吗,可以写在他的get中,效果是一样的

public RelayCommand ClickCommand 
{
    get
    {
        return new RelayCommand(ClickExecute);
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: