silverlight - 使用 EventToCommand 时如何判断哪个数据窗体按钮结束了编辑

标签 silverlight mvvm-light

我是 SilverLight 和 Mvvm-Light 的新手。我的 View 上有一个 DataForm,它显示/编辑我的 View 模型的 SelectedPerson 属性(一个 Person 对象)。

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

我将以下内容添加到我的 ViewModel 中:

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

public void DoSomething()
{
}

我在 View 中添加了以下内容:

<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。有没有办法知道按下了哪个按钮或在按下取消时取消调用?

感谢您提供的一切帮助!

最佳答案

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

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

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

希望对你有帮助

劳伦特

关于silverlight - 使用 EventToCommand 时如何判断哪个数据窗体按钮结束了编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2760321/

相关文章:

c# - 如何将 Windows.UI.Composition 动画集成到 UWP MVVM Light 应用程序中

c# - 在 MVVMLight 中关于 ViewModelLocator 正确使用 MEF

c# - 使用 MvvmLight 和 Xamarin.iOS 将属性绑定(bind)到 ViewModel

c# - Silverlight Master/Detail 的情况

silverlight - 提交操作失败 - NotFound from RIA Services with Silverlight 4 on SubmitChanges()

wpf - Mvvm:如何从另一个 ViewModel 更新我的 ObservableCollection<customobject>?

c# - .NET 将对象转换为...对象的目标是什么?

c# - XAML 页面构造函数

c# - 是否可以在 Windows Phone 7 中读取 .rar 或 .zip 文件?如何?

c# - 在 C# 中将字符串转为 JsonObject