wpf如何把click TextChanged MouseLive等路由事件转换为command

我们在进行wpf编程的时候为了更好的执行M V V M的编程模式。通常要把路由事件转换为command

但是通常情况下大多数wpf控件只有一个command属性用于绑定viewmodel中的命令

如button的click mouseenter mouseleave等路由事件怎么转化为command以调用viewmodel中的命令呢

通过下面的方法可以轻松的实现

1、首先要在项目里引入两个程序集

Microsoft.Practices.Prism.dll

System.Windows.Interactivity.dll

第一个程序集网上可以下到

第二个程序集通常装完vs后自带blend版本,那么该程序集就在这个blend版本下面

具体位置:C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries\System.Windows.Interactivity.dll

2、xaml代码段的编写

首先要在xaml头部引入相应的名称空间

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

比如现在又这样一个需求要在gridcontrol loaded完后执行某个命令(viewmode里)

按照通常的路由事件的思路直接在.cs后台文件中写。但是为了更好的遵循mvvm的实现原则。我们使用另一种方法

<dxg:GridControl x:name="testGC">

            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Loaded">
                    <i:InvokeCommandAction Command="{Binding LoadedCommand}" CommandParameter="{Binding ElementName=testGC}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>

</dxg:GridControl>

红色部分是关键代码在调用命令的时候还可以传入参数

3、viewmodel中的被调用的命令形式(viewmodel.cs)

        private ICommand loadedCommand;
        public ICommand LoadedCommand
        {
            get { return loadedCommand; }
        }

定义一个命令属性已把后台命令暴露给前端xaml。

下面我们定义一个命令要执行的方法

        private void GridcontrolLoaded(GridControl gc)
        {

                //todo
        }

最后在类构造函数中 把命令和方法关联起来

loadedCommand= new DelegateCommand<GridControl>(GridcontrolLoaded);

注意DelegateCommand要引入Microsoft.Practices.Prism.Commands名称空间


至此整个过程已经完成、若有疑问或建议欢迎提问探讨。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值