我是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。有没有办法知道按下哪个按钮或按下取消时按下呼叫?
感谢您提供的任何帮助!
答案 0 :(得分:3)
您正在寻找的信息会深深隐藏在EditAction中的DataFormEditEndedEventArgs中。 DataFormEditAction类型的此属性可以是Commit或Cancel。
有一种方法可以将参数传递给Command:将属性PassEventArgsToCommand(在EventToCommand对象上)设置为True。在ViewModel上,使用RelayCommand。委托的参数将是事件参数,然后您可以执行类似
的操作e =>
{
if (e.CommitAction == DataFormEditAction.Commit)
{
DoSomething();
}
}
希望它有所帮助,
劳伦
答案 1 :(得分:0)
如果您想对数据采取行动,您还可以对CurrentItem进行绑定并通过您的命令(或其他地方)使用它,这样您就可以对项目执行任何操作。