2010-05-03 31 views
3

我是SilverLight和Mvvm-Light的新手。我在我的视图上有一个DataForm,用于显示/编辑我的视图模型的SelectedPerson属性(一个Person对象)。如何判断使用EventToCommand时哪个数据形式按钮结束编辑

我想在我的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的方法。但是,当用户按下取消时,也会调用DoSomething。有没有办法知道当按下“取消”按钮时按下了哪个按钮或抑制了呼叫?

感谢您提供的任何帮助!

回答

3

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

有一种方法可以将参数传递给Command:将属性PassEventArgsToCommand(在EventToCommand对象上)设置为True。在ViewModel上,使用一个RelayCommand。将事件参数的委托的参数,那么你可以这样做

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

希望它能帮助,

洛朗

+0

好的,但是,如果您不将DataForms CurrentItem作为CommandParameter传递,那么您如何才能对数据执行操作? – Stimul8d 2011-08-27 11:12:17

0

如果你想采取行动,你也可以做一个绑定的数据到CurrentItem并通过你的命令(或其他地方)使用它,这样你就可以做任何你想要的物品。

相关问题