Mvvm(3) : ICommand

 

References:

https://www.c-sharpcorner.com/uploadfile/e06010/wpf-icommand-in-mvvm/

 

Commands提供一种机制,为了view去更新model

该接口包括 2个method 和1个 event.

bool CanExecute(object parameter);  
void Execute(object parameter);  
event EventHandler CanExecuteChanged;  

Execute方法只能在 CanExecute方法返回true才能执行,如果 CanExecute方法返回为false,那么binding control就会

disabled automatically.

为了知道 CanExecute的value,那就必须监听 CanExecuteChanged 这个事件,这可能会根据参数的变化而变化着。

 

 public ICommand UpdateCommand  
    {  
        get  
        {  
            if (mUpdater == null)  
                mUpdater = new Updater();  
            return mUpdater;  
        }  
        set  
        {  
            mUpdater = value;  
        }  
    } // UpdateCommand 是ICommand的实例
class Updater : ICommand  
{  
    #region ICommand Members  
  
    public bool CanExecute(object parameter)  
    {  
        return true;  
    }   
    public event EventHandler CanExecuteChanged  
    {  
        add { CommandManager.RequerySuggested += value; }  
        remove { CommandManager.RequerySuggested -= value; }  
    }   
  
    public void Execute(object parameter)  
    {  
         //Your Code  
    }  
    #endregion  
}  

 

  

<Button x:Name="btnUpdate" Width="100" Height="20" HorizontalAlignment="Center" Grid.Row="1" Content="Update" Command="{Binding Path=UpdateCommand}"/>
加载窗口后,会检查  CanExecute 的返回值 ,如果为真,Button就为enable状态,
Execute 方法准备被调用。如果返回值为假,Button就为disabled.状态
<Button x:Name="btnUpdate" Width="100" Height="20" HorizontalAlignment="Center" Grid.Row="1" Content="Update" Command="{Binding Path=UpdateCommand}" CommandParameter="{Binding ElementName=lstPerson, Path=SelectedItem.Address}">  
</Button>  
传递参数给 CanExecute and Execute 

CanExecuteChanged的任务

CanExecuteChanged通知绑定到该ICommand的任何命令源(如按钮或复选框),CanExecute返回的值已经更改。命令源关心这一点,因为它们通常需要相应地更新它们的状态(例如。如果CanExecute()返回false,按钮将禁用自己。

监听CanExecuteChanged
CommandManager。每当CommandManager认为发生了会影响命令执行能力的更改时,就会引发requerysuggest事件。例如,这可能是控件的焦点的改变。这种事件经常发生。

public event EventHandler CanExecuteChanged  
{  
    add { CommandManager.RequerySuggested += value; }  
    remove { CommandManager.RequerySuggested -= value; }  
}   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值