MVVM Light:在XAML中添加EventToCommand而不使用Blend,更简单的方法还是片段?

Mar*_*tin 36 mvvm mvvm-light eventtocommand

任何人都可以告诉我实际的语法是什么EventToCommand.据我所知,EventToCommand该类适用于Silverlight/WPF和WP7,因此我认为它是一个更好的选择.

据我所知,我可以添加任何点击事件并将其强行插入我的ViewModel,但我在找到最佳方法时遇到问题.

我知道你可以在没有Blend的情况下添加它,但是有可用的片段吗?

或者是否有更简单的方法通过VS 2010添加它?任何帮助或如果有人知道这方面的好教程将是伟大的.

Der*_*tie 75

假设您使用.NetFramework4:

首先添加namespace:

xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
Run Code Online (Sandbox Code Playgroud)

Loaded事件的语法.

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <cmd:EventToCommand Command="{Binding Mode=OneWay, Path=LoadedCommand}"
                            PassEventArgsToCommand="True" />
    </i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)

  • 它将事件转换为命令,在示例中,调用视图模型上的Command,将调用LoadedCommand. (3认同)

Mic*_*fer 5

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

xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
Run Code Online (Sandbox Code Playgroud)


Ste*_*nko 5

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

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

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

3)在“查看”XAML中添加:

A)

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:command="http://www.galasoft.ch/mvvmlight"
Run Code Online (Sandbox Code Playgroud)

b)

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Closing">
      <command:EventToCommand Command="{Binding OnClosingCommand}"/>
    </i:EventTrigger>
  </i:Interaction.Triggers>
</Window>
Run Code Online (Sandbox Code Playgroud)

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

public ICommand OnClosingCommand
{
  get
  {
    return new RelayCommand(() => SomeMethod());
  }
}
Run Code Online (Sandbox Code Playgroud)

PS 在你的视图中应该指定DataContext (XAML)

  <Window.DataContext>
    <vm:MainWindowViewModel/>
  </Window.DataContext>
Run Code Online (Sandbox Code Playgroud)

这是工作。我自己也是刚刚学会的。