【问题标题】:How to tell which dataform button ended edit when using EventToCommand使用 EventToCommand 时如何判断哪个数据表单按钮结束了编辑
【发布时间】:2012-10-27 11:46:35
【问题描述】:

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

感谢您提供的任何帮助!

【问题讨论】:

    标签: silverlight mvvm-light


    【解决方案1】:

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

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

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

    希望对你有帮助,

    劳伦特

    【讨论】:

    • 好的,...但是如果您不将 DataForms CurrentItem 作为 CommandParameter 传递,那么您如何处理数据?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-18
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多