WPF——事件绑定命令

24 篇文章 21 订阅

一、前言

我们都知道WPF中的命令在结合MVVM模式的框架使用之后(框架重新实现了ICommand),可以解耦。但并不是所有控件都可以绑定命令的,比如TextBox、ComboBox等。在使用这类控件时,如果你想让它的某个事件激发时调用ViewModel中的方法,往往需要把ViewModel中的方法暴露给View,然后在事件处理器中调用。这种调用方式增加了耦合度,虽然从短期实现来讲也没啥问题,但会让强迫症患者非常难受。


二、解决方法

目前收集了两种解决方法:

2.1. InputBindings

这使UIElement类自带的一个属性,
在这里插入图片描述
你可以给它添加鼠标按键绑定和键盘按键绑定:

			<TextBox Text="{Binding CurrentPage}" >
                <TextBox.InputBindings>
                    <KeyBinding Command="{Binding GotoPageCommand}" Key="Return"/>
                </TextBox.InputBindings>
            </TextBox>

所以这也算是环境自带的一种方法,一定程度上能解决大部分问题。常见的比如,在文本框按下回车键触发命令,它可以轻松实现。

但有时,我们想给环境自带的事件绑定命令,这就需要用到第二种方法了。

2.2. Behaviors包

Microsoft.Xaml.Behaviors.Wpf虽然不是环境自带的,但你可以通过NuGet轻松获得它。
在这里插入图片描述
使用方式也非常简单,
资源引用:

	xmlns:i="http://schemas.microsoft.com/xaml/behaviors"

XAML中调用:

		<ComboBox ItemsSource="{Binding Gasolines}" SelectedIndex="{Binding CurrentIndex}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Type}"/>
                </DataTemplate>
            </ComboBox.ItemTemplate>
            <!--Behaviorsd的事件触发器使用-->
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding DisplayPriceCommand}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </ComboBox>

三、结语

两种都属于应用型的方法,会用即可,不必深究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值