Как определить, какая кнопка формы данных закончила редактирование при использовании EventToCommand - PullRequest
3 голосов
/ 03 мая 2010

Я новичок в SilverLight и Mvvm-Light. В моем представлении есть DataForm, которая отображает / редактирует свойство SelectedPerson (объект Person) моей модели представления.

Я хочу выполнить команду на моей модели представления, когда пользователь нажимает кнопку Сохранить, но не хочу предпринимать действия, если пользователь нажимает кнопку отмены.

Я добавил следующее в свою ViewModel:

public RelayCommand PersonEditEnded {get; set;}
...
public void Initialize()
{
  PersonEditEnded = new RelayCommand(DoSomething);
  ...
}

public void DoSomething()
{
}

Я добавил в свой просмотр следующее:

<toolkit:DataForm x:Name="PersonForm" ... CurrentItem="{Binding SelectedPerson, Mode=TwoWay}">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="EditEnded">
      <gs:EventToCommand Command="{Binding PersonEditEnded, Mode=OneWay}"/>
    </i:EventTrigger>
  </i:Interaction.Triggers>
</toolkit:DataForm>

Это работает, и метод DoSomething вызывается, когда пользователь нажимает Submit. Однако DoSomething также вызывается, когда пользователь нажимает кнопку Отмена. Есть ли способ узнать, какая кнопка была нажата или чтобы подавить вызов при нажатии кнопки Отмена?

Спасибо за любую помощь, которую вы можете предложить!

Ответы [ 2 ]

3 голосов
/ 04 мая 2010

Информация, которую вы ищете, скрыта довольно глубоко в DataFormEditEndedEventArgs, в EditAction. Это свойство типа DataFormEditAction может принимать или отменять.

Существует способ передачи аргумента в Команду: установите для свойства PassEventArgsToCommand (для объекта EventToCommand) значение True. На ViewModel используйте RelayCommand. Параметром делегата будут аргументы события, тогда вы можете сделать что-то вроде

e =>
{
    if (e.CommitAction == DataFormEditAction.Commit)
    {
        DoSomething();
    }
}

Надеюсь, это поможет,

Laurent

0 голосов
/ 11 апреля 2012

Если вы хотите воздействовать на данные, вы также можете сделать привязку к CurrentItem и использовать его через свою команду (или в другом месте), чтобы вы могли делать с элементом все, что вы хотите.

...