个人随笔
技术改变世界

WPF 将命令绑定到事件上

WPF中控件支持的Command远远是不能完全满足我们的需求的,为了实现更多的需求我们往往需要在某个事件触发的时候就触发我们的指定的命令,那么如何来做呢。

首先你需要引用 System.Windows.Interactivity.dll ,如果你是NuGet获取了MVVMLight组件,那么它将自动引用到你的项目中。

这个文件是属于 expression blend 中的,这里就不再多说关于这个程序集的东西了,有兴趣可以问google,度娘。

 

将命令绑定到事件上

我项目就接着MVVMLightDemo的项目接着往下讲了,我在MainWindow中增加了一个TextBox,我这里示例实现目标为当窗体的Loaded事件触发时,就触发LoadData这个命令。而该命令中就对数据进行了赋值操作。似乎有点绕,我们来看看实战步骤吧,其实就两个步骤。

  1. 编写Command
  2. 编写XAML中的事件绑定

 

编写Command:LoadData

  //加载数据
 public RelayCommand LoadData { get; private set; }

 void ExecuteLoadData()
 {
     TestData = "测试绑定命令成功";
 }

这个命令我编写在MainWindowViewModel.cs中,其中有一个 TestData 属性将绑定到界面的TextBox控件中。然后我们回到XAML设计界面进行命令绑定工作。

 

在XAML绑定命令到事件中

<Window x:Class="MVVMLightDemo.MainWindow"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
     Title="MainWindow" Height="300" Width="300">
<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <i:InvokeCommandAction Command="{Binding LoadData}" />
    </i:EventTrigger>
</i:Interaction.Triggers>
.....

<i:Interaction.Triggers>标签中我们进行了绑定的工作,这里要注意的地方是

  1. 添xmlns引用:xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
  2. <i:Interaction.Triggers>一定要放在指定元素中,如我这里是希望对窗体操作则就放在窗体这的标签内。假设要绑定Button的某个事件,则就是这样的代码 <Buttom><i:Interaction.Triggers>... <../>测试按钮</Button>

以上代码其中EventName="Loaded"则就是事件名称,所以编写的时候要小心写错,写错了肯定就不行的。

然后 Command="{Binding LoadData}" 则就是对 LoadData 命令的绑定。

 

 

这就完成了我们的事件绑定到命令的工作,以下是本示例的Demo下载以及运行效果。

EventBindingCommand本示例源码下载:MVVMLightDemo_5

 

转载请注明出处王旭博客 » WPF 将命令绑定到事件上

分享到:更多 ()

评论 4

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #3

    您这个系列的文章对我非常有帮助,特别感谢!!

    Lucien2个月前 (04-18)回复
  2. #2

    少了 LoadData+=ExecuteLoadData; 这段代码

    路人A2年前 (2015-12-15)回复
    • 用Binding的方式,不需要 += 委托

      王旭2年前 (2015-12-16)回复
  3. #1

    这个应该和“教程4”说的是一会儿事,只是XAML里命名空间标记的形式不一样吧?

    路人甲2年前 (2015-02-01)回复