使用EventToCommand时如何判断哪个数据形式按钮结束编辑

时间:2010-05-03 18:38:01

标签: silverlight mvvm-light

我是SilverLight和Mvvm-Light的新手。我的视图中有一个DataForm,用于显示/编辑视图模型的SelectedPerson属性(Person对象)。

我想在用户单击“保存”按钮时在我的viewmodel上执行命令,但如果用户单击“取消”则不想执行操作。

我将以下内容添加到我的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>

这很有效,当用户按下Submit时会调用DoSomething方法。但是,当用户按下“取消”时,也会调用DoSomething。有没有办法知道按下哪个按钮或按下取消时按下呼叫?

感谢您提供的任何帮助!

2 个答案:

答案 0 :(得分:3)

您正在寻找的信息会深深隐藏在EditAction中的DataFormEditEndedEventArgs中。 DataFormEditAction类型的此属性可以是Commit或Cancel。

有一种方法可以将参数传递给Command:将属性PassEventArgsToCommand(在EventToCommand对象上)设置为True。在ViewModel上,使用RelayCommand。委托的参数将是事件参数,然后您可以执行类似

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

希望它有所帮助,

劳伦

答案 1 :(得分:0)

如果您想对数据采取行动,您还可以对CurrentItem进行绑定并通过您的命令(或其他地方)使用它,这样您就可以对项目执行任何操作。