MVVM Light: Добавление EventToCommand в XAML без Blend, более простой способ или фрагмент? - PullRequest
35 голосов
/ 03 мая 2011

Может кто-нибудь сказать мне, что фактический синтаксис для класса EventToCommand.Из того, что я считаю, класс EventToCommand работает с Silverlight / WPF и WP7, поэтому я считаю, что это лучший выбор для понижения.

Из того, что я считаю, я могу добавить любое событие щелчка и получить его принудительноев мой ViewModel, но у меня возникла проблема с поиском лучшего способа сделать это.

Я знаю, что вы можете добавить его без Blend, но есть ли фрагменты?

Или есть более простой способ добавить его через VS 2010?Любая помощь или если кто-нибудь знает хороший учебник по этому вопросу, было бы здорово.

Ответы [ 4 ]

72 голосов
/ 03 мая 2011

Предположим, вы используете .NetFramework4:

Первое добавление namespace:

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

Синтаксис события Loaded.

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <cmd:EventToCommand Command="{Binding Mode=OneWay, Path=LoadedCommand}"
                            PassEventArgsToCommand="True" />
    </i:EventTrigger>
</i:Interaction.Triggers>
8 голосов
/ 03 мая 2011

Вот пост, в котором говорится о всем, что вам нужно знать о EventToCommand от создателя MVVMLight;)

4 голосов
/ 18 ноября 2015

Я обновил свой проект, и похоже, что они переместили команду в:

xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
3 голосов
/ 17 ноября 2017

0) если вы не знаете WPF и MVVM, прочитайте статью Джоша Смита о шаблонах 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"

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());
  }
}

PS В вашем View следует указать DataContext (XAML)

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

Это работа.Я сам только что узнал.

...