MVVM Light:在没有Blend的情况下在XAML中添加EventToCommand,是否有更简单的方法或代码片段?

37
有人可以告诉我 EventToCommand 类的实际语法是什么吗?我相信 EventToCommand 类可用于 Silverlight/WPF 和 WP7,因此我认为这是更好的选择。

据我所知,我可以添加任何单击事件并将其强制输入到我的 ViewModel 中,但我在寻找最佳方法时遇到了问题。

我知道可以在没有 Blend 的情况下添加它,但是否有可用的代码段?

还是有更简单的方法可以通过 VS 2010 添加它?希望能得到任何帮助或者如果有人知道一个好的教程。


这是一篇关于MVVMLight创始人所说的关于EventToCommand的一切你需要知道的的文章 ;) - AbdouMoumen
1
我已经创建了一个行为,它不需要MVVMLight。但是它确实需要System.Windows.Interactivity,但是接受的答案也需要它。 - Mike Fuchs
3个回答

84

假设您使用.NetFramework4:

首先添加namespace:

xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
加载事件的语法。
<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <cmd:EventToCommand Command="{Binding Mode=OneWay, Path=LoadedCommand}"
                            PassEventArgsToCommand="True" />
    </i:EventTrigger>
</i:Interaction.Triggers>

1
那么,视图模型如何使用这个事件呢? - Ciaran Gallagher
3
它将事件转换为命令,在本例中,一个名为LoadedCommand的视图模型上的命令将被调用。 - Derek Beattie
太好了,谢谢。我将命令名称与我的视图模型中的命令名称匹配起来,结果如预期一样工作了。 - Ciaran Gallagher
@Dai OneWay 会在源更改时更新目标,而 TwoWay 则会在源更改时更新目标,并在目标更改时更新源。 - Derek Beattie
我正在尝试将EventToCommand用于ListView以控制ItemTapped,但是我应该把<i:Interaction.Triggers>放在哪里? - KillemAll
显示剩余3条评论

5

0) 如果您不了解WPF和MVVM,请阅读Josh Smith关于WPF和MVVM模式的文章https://msdn.microsoft.com/en-us/magazine/dd419663.aspx

1) 在您的项目中添加MvvmLightLibs包(通过NuGet)

2) 添加对System.Windows.Interactivity的引用

3) 在“View”XAML中添加:

a)

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:command="http://www.galasoft.ch/mvvmlight"

b)

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Closing">
      <command:EventToCommand Command="{Binding OnClosingCommand}"/>
    </i:EventTrigger>
  </i:Interaction.Triggers>
</Window>

4) 在ViewModel中添加必要的属性

public ICommand OnClosingCommand
{
  get
  {
    return new RelayCommand(() => SomeMethod());
  }
}

P.S. 在你的视图中应该指定DataContext (XAML)

  <Window.DataContext>
    <vm:MainWindowViewModel/>
  </Window.DataContext>

这是一项工作。我自己也是刚学习。


我正在尝试在ListView中实现ItemTapped......但我不知道在哪里放置你的代码,你能帮我吗? - KillemAll

5

我更新了我的项目,看起来命令被移动到了:

xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"

1
这与https://dev59.com/5m025IYBdhLWcg3wqn4N#5869889有何不同 - 啊,我明白了,这是一个晚期编辑。在那种情况下,这应该真的是对其他答案的评论。 - Ruben Bartelink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接